@Override public void setLongProperty(final String name, final long value) throws JMSException { checkProperty(name); message.putLongProperty(name, value); }
@Override public void setLongProperty(final String name, final long value) throws JMSException { checkProperty(name); message.putLongProperty(name, value); }
@Override public void setLongProperty(final String name, final long value) throws JMSException { checkProperty(name); message.putLongProperty(name, value); }
@Test public void testGetScheduledCountOnRemove() throws Exception { long delay = Integer.MAX_VALUE; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(0, queueControl.getScheduledCount()); Field queueMemorySizeField = QueueImpl.class.getDeclaredField("queueMemorySize"); queueMemorySizeField.setAccessible(true); final LocalQueueBinding binding = (LocalQueueBinding) server.getPostOffice().getBinding(queue); Queue q = binding.getQueue(); AtomicInteger queueMemorySize1 = (AtomicInteger) queueMemorySizeField.get(q); assertEquals(0, queueMemorySize1.get()); ClientProducer producer = session.createProducer(address); ClientMessage message = session.createMessage(durable); message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, System.currentTimeMillis() + delay); producer.send(message); queueControl.removeAllMessages(); Assert.assertEquals(0, queueControl.getMessageCount()); //Verify that original queue has a memory size of 0 assertEquals(0, queueMemorySize1.get()); session.deleteQueue(queue); }
@Override public void onMessage(final ClientMessage request) { try { ClientMessage reply = session.createMessage(false); SimpleString replyTo = (SimpleString) request.getObjectProperty(ClientMessageImpl.REPLYTO_HEADER_NAME); long value = (Long) request.getObjectProperty(key); reply.putLongProperty(key, value); ClientProducer replyProducer = session.createProducer(replyTo); replyProducer.send(reply); request.acknowledge(); } catch (ActiveMQException e) { e.printStackTrace(); } } }
m1.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, timeout); producer.send(m1); ClientMessage m2 = session.createMessage(durable); m2.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, timeout); producer.send(m2);
@Test public void testGetScheduledCount() throws Exception { long delay = 500; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(0, queueControl.getScheduledCount()); ClientProducer producer = session.createProducer(address); ClientMessage message = session.createMessage(durable); message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, System.currentTimeMillis() + delay); producer.send(message); long timeout = System.currentTimeMillis() + 5000; while (timeout > System.currentTimeMillis() && queueControl.getScheduledCount() != 1) { Thread.sleep(100); } assertScheduledMetrics(queueControl, 1, durable); assertMessageMetrics(queueControl, 1, durable); consumeMessages(0, session, queue); Thread.sleep(delay * 2); Assert.assertEquals(0, queueControl.getScheduledCount()); consumeMessages(1, session, queue); assertMessageMetrics(queueControl, 0, durable); assertScheduledMetrics(queueControl, 0, durable); session.deleteQueue(queue); }
@Test public void testListMessagesWithFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomLong(); long unmatchingValue = matchingValue + 1; String filter = key + " =" + matchingValue; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); ClientProducer producer = session.createProducer(address); ClientMessage matchingMessage = session.createMessage(durable); matchingMessage.putLongProperty(key, matchingValue); producer.send(matchingMessage); ClientMessage unmatchingMessage = session.createMessage(durable); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(unmatchingMessage); assertMessageMetrics(queueControl, 2, durable); Map<String, Object>[] messages = queueControl.listMessages(filter); Assert.assertEquals(1, messages.length); Assert.assertEquals(matchingValue, Long.parseLong(messages[0].get("key").toString())); consumeMessages(2, session, queue); messages = queueControl.listMessages(filter); Assert.assertEquals(0, messages.length); assertMessageMetrics(queueControl, 0, durable); session.deleteQueue(queue); }
@Test public void testListScheduledMessages() throws Exception { long delay = 2000; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); int intValue = RandomUtil.randomInt(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); ClientProducer producer = session.createProducer(address); ClientMessage message = session.createMessage(durable); message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, System.currentTimeMillis() + delay); message.putIntProperty(new SimpleString("key"), intValue); producer.send(message); // unscheduled message producer.send(session.createMessage(durable)); Map<String, Object>[] messages = queueControl.listScheduledMessages(); Assert.assertEquals(1, messages.length); assertScheduledMetrics(queueControl, 1, durable); Assert.assertEquals(intValue, Integer.parseInt((messages[0].get("key")).toString())); Thread.sleep(delay + 500); messages = queueControl.listScheduledMessages(); Assert.assertEquals(0, messages.length); consumeMessages(2, session, queue); session.deleteQueue(queue); }
@Test public void testListMessagesAsJSONWithFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomLong(); long unmatchingValue = matchingValue + 1; String filter = key + " =" + matchingValue; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); ClientProducer producer = session.createProducer(address); ClientMessage matchingMessage = session.createMessage(durable); matchingMessage.putLongProperty(key, matchingValue); producer.send(matchingMessage); ClientMessage unmatchingMessage = session.createMessage(durable); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(unmatchingMessage); String jsonString = queueControl.listMessagesAsJSON(filter); Assert.assertNotNull(jsonString); JsonArray array = JsonUtil.readJsonArray(jsonString); Assert.assertEquals(1, array.size()); long l = Long.parseLong(array.getJsonObject(0).get("key").toString().replaceAll("\"", "")); Assert.assertEquals(matchingValue, l); consumeMessages(2, session, queue); jsonString = queueControl.listMessagesAsJSON(filter); Assert.assertNotNull(jsonString); array = JsonUtil.readJsonArray(jsonString); Assert.assertEquals(0, array.size()); session.deleteQueue(queue); }
@Test public void testManyMessagesSameTime() throws Exception { ClientSessionFactory sessionFactory = createSessionFactory(locator); ClientSession session = sessionFactory.createSession(false, false, false); session.createQueue(atestq, atestq, null, true); ClientProducer producer = session.createProducer(atestq); long time = System.currentTimeMillis(); time += 1000; for (int i = 0; i < 10; i++) { ClientMessage message = session.createMessage(true); message.putIntProperty("value", i); message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, time); producer.send(message); } session.commit(); session.start(); ClientConsumer consumer = session.createConsumer(atestq); for (int i = 0; i < 10; i++) { ClientMessage message = consumer.receive(15000); assertNotNull(message); message.acknowledge(); assertEquals(i, message.getIntProperty("value").intValue()); } session.commit(); Assert.assertNull(consumer.receiveImmediate()); session.close(); }
@Test public void testCountMessagesWithFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomLong(); long unmatchingValue = matchingValue + 1; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); ClientProducer producer = session.createProducer(address); // send on queue ClientMessage matchingMessage = session.createMessage(durable); matchingMessage.putLongProperty(key, matchingValue); ClientMessage unmatchingMessage = session.createMessage(durable); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(matchingMessage); producer.send(unmatchingMessage); producer.send(matchingMessage); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(3, getMessageCount(queueControl)); assertMessageMetrics(queueControl, 3, durable); Assert.assertEquals(2, queueControl.countMessages(key + " =" + matchingValue)); Assert.assertEquals(1, queueControl.countMessages(key + " =" + unmatchingValue)); session.deleteQueue(queue); }
@Test public void testCountDeliveringMessageCountNoFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomLong(); long unmatchingValue = matchingValue + 1; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, null, false); ClientProducer producer = session.createProducer(address); ClientMessage matchingMessage = session.createMessage(false); matchingMessage.putLongProperty(key, matchingValue); ClientMessage unmatchingMessage = session.createMessage(false); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(matchingMessage); producer.send(unmatchingMessage); producer.send(matchingMessage); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(0, queueControl.countDeliveringMessages(null)); ClientConsumer consumer = session.createConsumer(queue, null, 1024 * 1024, 1, false); ClientMessage message = consumer.receive(500); Assert.assertNotNull(message); Assert.assertEquals(3, queueControl.countDeliveringMessages(null)); consumer.close(); session.deleteQueue(queue); }
@Test public void testPagedMessageDeliveredCorrectly() throws Exception { // then we create a client as normal ClientSessionFactory sessionFactory = createSessionFactory(locator); ClientSession session = sessionFactory.createSession(false, true, false); session.createQueue(atestq, atestq, null, true); ClientProducer producer = session.createProducer(atestq); ClientMessage message = createDurableMessage(session, "m1"); long time = System.currentTimeMillis(); time += 10000; message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, time); producer.send(message); producer.close(); ClientConsumer consumer = session.createConsumer(atestq); session.start(); ClientMessage message2 = consumer.receive(10250); Assert.assertTrue(System.currentTimeMillis() >= time); Assert.assertEquals("m1", message2.getBodyBuffer().readString()); message2.acknowledge(); // Make sure no more messages consumer.close(); consumer = session.createConsumer(atestq); Assert.assertNull(consumer.receiveImmediate()); session.close(); }
@Test public void testRequest() throws Exception { final SimpleString key = RandomUtil.randomSimpleString(); long value = RandomUtil.randomLong(); SimpleString requestAddress = new SimpleString("AdTest"); SimpleString requestQueue = RandomUtil.randomSimpleString(); final ClientSession session = sf.createSession(false, true, true); session.start(); session.createTemporaryQueue(requestAddress, requestQueue); ClientConsumer requestConsumer = session.createConsumer(requestQueue); requestConsumer.setMessageHandler(new SimpleMessageHandler(key, session)); ClientRequestor requestor = new ClientRequestor(session, requestAddress); ClientMessage request = session.createMessage(false); request.putLongProperty(key, value); ClientMessage reply = requestor.request(request, 500); Assert.assertNotNull("reply was not received", reply); Assert.assertEquals(value, reply.getObjectProperty(key)); Thread.sleep(5000); session.close(); }
@Test public void testTwoRequests() throws Exception { final SimpleString key = RandomUtil.randomSimpleString(); long value = RandomUtil.randomLong(); SimpleString requestAddress = RandomUtil.randomSimpleString(); SimpleString requestQueue = RandomUtil.randomSimpleString(); ClientSessionFactory sf = createSessionFactory(locator); final ClientSession session = sf.createSession(false, true, true); session.start(); session.createTemporaryQueue(requestAddress, requestQueue); ClientConsumer requestConsumer = session.createConsumer(requestQueue); requestConsumer.setMessageHandler(new SimpleMessageHandler(key, session)); ClientRequestor requestor = new ClientRequestor(session, requestAddress); ClientMessage request = session.createMessage(false); request.putLongProperty(key, value); ClientMessage reply = requestor.request(request, 500); Assert.assertNotNull("reply was not received", reply); Assert.assertEquals(value, reply.getObjectProperty(key)); request = session.createMessage(false); request.putLongProperty(key, value + 1); reply = requestor.request(request, 500); Assert.assertNotNull("reply was not received", reply); Assert.assertEquals(value + 1, reply.getObjectProperty(key)); session.close(); }
@Test public void testScheduledMessages() throws Exception { final long DELAY_TIME = 10; final int MESSAGE_COUNT = 5; Queue queue = server.locateQueue(qName1); ClientProducer producer = clientSession.createProducer(address); ClientConsumer consumer = clientSession.createConsumer(qName1); SimpleString rh = new SimpleString("SMID1"); long timeSent = 0; for (int i = 0; i < MESSAGE_COUNT; i++) { ClientMessage m = createTextMessage(clientSession, "m" + i); m.setDurable(true); m.putStringProperty(Message.HDR_LAST_VALUE_NAME, rh); timeSent = System.currentTimeMillis(); m.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, timeSent + (i * DELAY_TIME)); producer.send(m); } // allow schedules to elapse so the messages will be delivered to the queue Wait.waitFor(() -> queue.getScheduledCount() == 0); clientSession.start(); ClientMessage m = consumer.receive(5000); assertNotNull(m); assertEquals(m.getBodyBuffer().readString(), "m" + (MESSAGE_COUNT - 1)); assertEquals(0, queue.getScheduledCount()); }
@Test public void testCountDeliveringMessageCountNoGroupNoFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomLong(); long unmatchingValue = matchingValue + 1; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, null, false); ClientProducer producer = session.createProducer(address); ClientMessage matchingMessage = session.createMessage(false); matchingMessage.putLongProperty(key, matchingValue); ClientMessage unmatchingMessage = session.createMessage(false); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(matchingMessage); producer.send(unmatchingMessage); producer.send(matchingMessage); session.commit(); QueueControl queueControl = createManagementControl(address, queue); String result = queueControl.countDeliveringMessages(null, null); JsonObject jsonObject = JsonUtil.readJsonObject(result); Assert.assertEquals(0, jsonObject.getInt("null")); ClientConsumer consumer = session.createConsumer(queue, null, 1024 * 1024, 1, false); ClientMessage message = consumer.receive(500); Assert.assertNotNull(message); result = queueControl.countDeliveringMessages(null, null); jsonObject = JsonUtil.readJsonObject(result); Assert.assertEquals(3, jsonObject.getInt("null")); consumer.close(); session.deleteQueue(queue); }
@Test public void testCountDeliveringMessageCountWithFilter() throws Exception { SimpleString key = new SimpleString("key"); long matchingValue = RandomUtil.randomPositiveLong(); long unmatchingValue = matchingValue + 1; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, null, false); ClientProducer producer = session.createProducer(address); ClientMessage matchingMessage = session.createMessage(false); matchingMessage.putLongProperty(key, matchingValue); ClientMessage unmatchingMessage = session.createMessage(false); unmatchingMessage.putLongProperty(key, unmatchingValue); producer.send(matchingMessage); producer.send(unmatchingMessage); producer.send(matchingMessage); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(0, queueControl.countDeliveringMessages(null)); Assert.assertEquals(0, queueControl.countDeliveringMessages(key + " =" + matchingValue)); Assert.assertEquals(0, queueControl.countDeliveringMessages(key + " =" + unmatchingValue)); ClientConsumer consumer = session.createConsumer(queue, null, 1024 * 1024, 1, false); ClientMessage message = consumer.receive(500); Assert.assertNotNull(message); Assert.assertEquals(3, queueControl.countDeliveringMessages(null)); Assert.assertEquals(2, queueControl.countDeliveringMessages(key + " =" + matchingValue)); Assert.assertEquals(1, queueControl.countDeliveringMessages(key + " =" + unmatchingValue)); consumer.close(); session.deleteQueue(queue); }
@Test public void testMoveMessagesToUnknownQueue() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString unknownQueue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); ClientProducer producer = session.createProducer(address); // send on queue ClientMessage message = session.createMessage(durable); SimpleString key = RandomUtil.randomSimpleString(); long value = RandomUtil.randomLong(); message.putLongProperty(key, value); producer.send(message); QueueControl queueControl = createManagementControl(address, queue); assertMessageMetrics(queueControl, 1, durable); // moved all messages to unknown queue try { queueControl.moveMessages(null, unknownQueue.toString()); Assert.fail("operation must fail if the other queue does not exist"); } catch (Exception e) { } Assert.assertEquals(1, getMessageCount(queueControl)); assertMessageMetrics(queueControl, 1, durable); consumeMessages(1, session, queue); session.deleteQueue(queue); }