// HORNETQ- 1084 @Test public void testBasicSendWithDLAButNoBinding() throws Exception { SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(qName.toString(), addressSettings); // SimpleString dlq = new SimpleString("DLQ1"); // clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(qName, qName, null, false); ClientProducer producer = clientSession.createProducer(qName); producer.send(createTextMessage(clientSession, "heyho!")); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); Queue q = (Queue) server.getPostOffice().getBinding(qName).getBindable(); Assert.assertEquals(0, q.getDeliveringCount()); }
@Test public void testGetBindingNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); String divertName = RandomUtil.randomString(); session.createQueue(address, queue, false); CoreMessagingProxy proxy = createProxy(address); Object[] bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(1, bindingNames.length); assertEquals(queue.toString(), bindingNames[0]); server .getActiveMQServerControl() .createDivert( divertName, randomString(), address.toString(), RandomUtil.randomString(), false, null, null); bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(2, bindingNames.length); session.deleteQueue(queue); bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(1, bindingNames.length); assertEquals(divertName.toString(), bindingNames[0]); }
@Test public void testNonMatchingMessagesFollowedByMatchingMessages() throws Exception { ClientMessage message = session.createMessage(false); message.putStringProperty("animal", "hippo"); producer.send(message); assertNull(consumer.receiveImmediate()); message = session.createMessage(false); message.putStringProperty("animal", "giraffe"); log.info("sending second msg"); producer.send(message); ClientMessage received = consumer.receiveImmediate(); assertNotNull(received); assertEquals("giraffe", received.getStringProperty("animal")); assertNull(consumer.receiveImmediate()); session.close(); }
@Override @Before public void setUp() throws Exception { super.setUp(); server = internalCreateServer(); server.createAddressInfo(new AddressInfo(ADDRESS, RoutingType.ANYCAST)); Queue queue = server.createQueue(ADDRESS, RoutingType.ANYCAST, ADDRESS, null, true, false); queue.getPageSubscription().getPagingStore().startPaging(); for (int i = 0; i < 10; i++) { queue.getPageSubscription().getPagingStore().forceAnotherPage(); } final ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(null, null, false, true, true, false, 0); ClientProducer prod = session.createProducer(ADDRESS); for (int i = 0; i < 500; i++) { ClientMessage msg = session.createMessage(true); msg.putIntProperty("key", i); prod.send(msg); if (i > 0 && i % 10 == 0) { session.commit(); } } session.close(); locator.close(); server.stop(); internalCreateServer(); }
private void setupServer(final JournalType journalType) throws Exception { Configuration config = createDefaultNettyConfig() .setJournalType(journalType) .setJournalFileSize(ActiveMQDefaultConfiguration.getDefaultJournalFileSize()) .setJournalMinFiles(ActiveMQDefaultConfiguration.getDefaultJournalMinFiles()) .setJournalCompactMinFiles(2) .setJournalCompactPercentage(50); server = createServer(true, config); server.start(); ServerLocator locator = createNettyNonHALocator() .setBlockOnDurableSend(false) .setBlockOnNonDurableSend(false) .setBlockOnAcknowledge(false); sf = createSessionFactory(locator); ClientSession sess = sf.createSession(); try { sess.createQueue(ADDRESS, QUEUE, true); } catch (Exception ignored) { } sess.close(); locator.close(); locator = createInVMNonHALocator(); sf = createSessionFactory(locator); }
@Test public void testRestartJournal() throws Throwable { runExternalProcess(getTestDir(), 0, JournalCrashTest.FIRST_RUN); runExternalProcess(getTestDir(), JournalCrashTest.FIRST_RUN, JournalCrashTest.SECOND_RUN); runExternalProcess(getTestDir(), JournalCrashTest.SECOND_RUN, JournalCrashTest.THIRD_RUN); runExternalProcess(getTestDir(), JournalCrashTest.THIRD_RUN, JournalCrashTest.FOURTH_RUN); printJournal(); startServer(); try (ClientSession session = factory.createSession(true, true)) { ClientConsumer consumer = session.createConsumer(QUEUE); session.start(); for (int i = 0; i < JournalCrashTest.FOURTH_RUN; i++) { ClientMessage msg = consumer.receive(5000); Assert.assertNotNull("Msg at " + i, msg); msg.acknowledge(); Assert.assertEquals(i, msg.getObjectProperty(new SimpleString("key"))); } session.close(); } }
private void doTestBasicGrouping() throws Exception { ClientProducer clientProducer = clientSession.createProducer(qName); ClientConsumer consumer = clientSession.createConsumer(qName); ClientConsumer consumer2 = clientSession.createConsumer(qName); clientSession.start(); SimpleString groupId = new SimpleString("grp1"); int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(clientSession, "m" + i); message.putStringProperty(Message.HDR_GROUP_ID, groupId); clientProducer.send(message); } CountDownLatch latch = new CountDownLatch(numMessages); DummyMessageHandler dummyMessageHandler = new DummyMessageHandler(latch, true); consumer.setMessageHandler(dummyMessageHandler); DummyMessageHandler dummyMessageHandler2 = new DummyMessageHandler(latch, true); consumer2.setMessageHandler(dummyMessageHandler2); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); Assert.assertEquals(100, dummyMessageHandler.list.size()); Assert.assertEquals(0, dummyMessageHandler2.list.size()); consumer.close(); consumer2.close(); }
private void doTestMultipleGroupingSingleConsumer(final boolean directDelivery) throws Exception { ClientProducer clientProducer = clientSession.createProducer(qName); ClientConsumer consumer = clientSession.createConsumer(qName); if (directDelivery) { clientSession.start(); } SimpleString groupId = new SimpleString("grp1"); SimpleString groupId2 = new SimpleString("grp2"); int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(clientSession, "m" + i); if (i % 2 == 0 || i == 0) { message.putStringProperty(Message.HDR_GROUP_ID, groupId); } else { message.putStringProperty(Message.HDR_GROUP_ID, groupId2); } clientProducer.send(message); } if (!directDelivery) { clientSession.start(); } CountDownLatch latch = new CountDownLatch(numMessages); DummyMessageHandler dummyMessageHandler = new DummyMessageHandler(latch, true); consumer.setMessageHandler(dummyMessageHandler); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); Assert.assertEquals(dummyMessageHandler.list.size(), 100); int i = 0; for (ClientMessage message : dummyMessageHandler.list) { Assert.assertEquals(message.getBodyBuffer().readString(), "m" + i); i += 1; } consumer.close(); }
@Test public void testCounter() throws Exception { ClientSessionFactory sf = createSessionFactory(sl); ClientSession session = sf.createSession(); try { Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false); PageSubscriptionCounter counter = locateCounter(queue); StorageManager storage = server.getStorageManager(); Transaction tx = new TransactionImpl(server.getStorageManager()); counter.increment(tx, 1); assertEquals(0, counter.getValue()); tx.commit(); storage.waitOnOperations(); assertEquals(1, counter.getValue()); } finally { sf.close(); session.close(); } }
@Test public void testGetQueueNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString anotherQueue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, true); CoreMessagingProxy proxy = createProxy(address); Object[] queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(1, queueNames.length); Assert.assertEquals(queue.toString(), queueNames[0]); session.createQueue(address, anotherQueue, false); queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(2, queueNames.length); session.deleteQueue(queue); queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(1, queueNames.length); Assert.assertEquals(anotherQueue.toString(), queueNames[0]); session.deleteQueue(anotherQueue); }
@Test public void testNonMatchingMessagesFollowedByMatchingMessagesMany() throws Exception { for (int i = 0; i < QueueImpl.MAX_DELIVERIES_IN_LOOP * 2; i++) { ClientMessage message = session.createMessage(false); message.putStringProperty("animal", "hippo"); producer.send(message); } assertNull(consumer.receiveImmediate()); for (int i = 0; i < QueueImpl.MAX_DELIVERIES_IN_LOOP * 2; i++) { ClientMessage message = session.createMessage(false); message.putStringProperty("animal", "giraffe"); producer.send(message); } for (int i = 0; i < QueueImpl.MAX_DELIVERIES_IN_LOOP * 2; i++) { ClientMessage received = consumer.receiveImmediate(); assertNotNull(received); assertEquals("giraffe", received.getStringProperty("animal")); } assertNull(consumer.receiveImmediate()); session.close(); }
@Test public void testConsumerBrowserMessageAckDoesNothing() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, null, true); for (int i = 0; i < numMessages; i++) { ClientMessage message2 = consumer.receive(1000); message2.acknowledge(); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } // assert that all the messages are there and none have been acked Assert.assertEquals( 0, ((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount()); Assert.assertEquals( 100, getMessageCount(((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()))); session.close(); }
@Test public void testConsumerBrowserWithStringSelector() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); if (i % 2 == 0) { message.putStringProperty(new SimpleString("color"), new SimpleString("RED")); } producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, new SimpleString("color = 'RED'"), true); for (int i = 0; i < numMessages; i += 2) { ClientMessage message2 = consumer.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } session.close(); }
/** * @param session * @param producer * @throws Exception */ private void sendMessage(ClientSession session, ClientProducer producer, String color, String msg) throws Exception { ClientMessage anyMessage = session.createMessage(true); anyMessage.putStringProperty("color", color); anyMessage.putStringProperty("value", msg); producer.send(anyMessage); session.commit(); }
@Test public void testDeadLetterAddressWithOverridenSublevelAddressSettings() throws Exception { int defaultDeliveryAttempt = 3; int specificeDeliveryAttempt = defaultDeliveryAttempt + 1; SimpleString address = new SimpleString("prefix.address"); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString defaultDeadLetterAddress = RandomUtil.randomSimpleString(); SimpleString defaultDeadLetterQueue = RandomUtil.randomSimpleString(); SimpleString specificDeadLetterAddress = RandomUtil.randomSimpleString(); SimpleString specificDeadLetterQueue = RandomUtil.randomSimpleString(); AddressSettings defaultAddressSettings = new AddressSettings() .setMaxDeliveryAttempts(defaultDeliveryAttempt) .setDeadLetterAddress(defaultDeadLetterAddress); server.getAddressSettingsRepository().addMatch("*", defaultAddressSettings); AddressSettings specificAddressSettings = new AddressSettings() .setMaxDeliveryAttempts(specificeDeliveryAttempt) .setDeadLetterAddress(specificDeadLetterAddress); server.getAddressSettingsRepository().addMatch(address.toString(), specificAddressSettings); clientSession.createQueue(address, queue, false); clientSession.createQueue(defaultDeadLetterAddress, defaultDeadLetterQueue, false); clientSession.createQueue(specificDeadLetterAddress, specificDeadLetterQueue, false); ClientProducer producer = clientSession.createProducer(address); ClientMessage clientMessage = createTextMessage(clientSession, "heyho!"); producer.send(clientMessage); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(queue); ClientConsumer defaultDeadLetterConsumer = clientSession.createConsumer(defaultDeadLetterQueue); ClientConsumer specificDeadLetterConsumer = clientSession.createConsumer(specificDeadLetterQueue); for (int i = 0; i < defaultDeliveryAttempt; i++) { ClientMessage m = clientConsumer.receive(500); Assert.assertNotNull(m); Assert.assertEquals(i + 1, m.getDeliveryCount()); m.acknowledge(); clientSession.rollback(); } Assert.assertNull(defaultDeadLetterConsumer.receiveImmediate()); Assert.assertNull(specificDeadLetterConsumer.receiveImmediate()); // one more redelivery attempt: ClientMessage m = clientConsumer.receive(500); Assert.assertNotNull(m); Assert.assertEquals(specificeDeliveryAttempt, m.getDeliveryCount()); m.acknowledge(); clientSession.rollback(); Assert.assertNull(defaultDeadLetterConsumer.receiveImmediate()); Assert.assertNotNull(specificDeadLetterConsumer.receive(500)); }
@Test public void testJmsDestination() throws Exception { ClientSession session = basicSetUp(); jmsServer.createQueue( true, "myQueue", null, true, "myQueueJndiBinding1", "myQueueJndiBinding2"); jmsServer.createTopic(true, "myTopic", "myTopicJndiBinding1", "myTopicJndiBinding2"); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = createSessionFactory(locator); session = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session); assertNotNull(namingContext.lookup("myQueueJndiBinding1")); assertNotNull(namingContext.lookup("myQueueJndiBinding2")); assertNotNull(namingContext.lookup("myTopicJndiBinding1")); assertNotNull(namingContext.lookup("myTopicJndiBinding2")); jmsServer.createConnectionFactory( "test-cf", false, JMSFactoryType.CF, Arrays.asList("in-vm1"), "test-cf"); ConnectionFactory cf = (ConnectionFactory) namingContext.lookup("test-cf"); Connection connection = cf.createConnection(); Session jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = jmsSession.createProducer((Destination) namingContext.lookup("myQueueJndiBinding1")); producer.send(jmsSession.createTextMessage()); MessageConsumer consumer = jmsSession.createConsumer((Destination) namingContext.lookup("myQueueJndiBinding2")); connection.start(); assertNotNull(consumer.receive(3000)); consumer = jmsSession.createConsumer((Destination) namingContext.lookup("myTopicJndiBinding1")); producer = jmsSession.createProducer((Destination) namingContext.lookup("myTopicJndiBinding2")); producer.send(jmsSession.createTextMessage()); assertNotNull(consumer.receive(3000)); connection.close(); }
@Test public void testCleanupCounterNonPersistent() throws Exception { ClientSessionFactory sf = createSessionFactory(sl); ClientSession session = sf.createSession(); try { Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false); PageSubscriptionCounter counter = locateCounter(queue); ((PageSubscriptionCounterImpl) counter).setPersistent(false); StorageManager storage = server.getStorageManager(); Transaction tx = new TransactionImpl(server.getStorageManager()); for (int i = 0; i < 2100; i++) { counter.increment(tx, 1); if (i % 200 == 0) { tx.commit(); storage.waitOnOperations(); assertEquals(i + 1, counter.getValue()); tx = new TransactionImpl(server.getStorageManager()); } } tx.commit(); storage.waitOnOperations(); assertEquals(2100, counter.getValue()); server.stop(); server = newActiveMQServer(); server.start(); queue = server.locateQueue(new SimpleString("A1")); assertNotNull(queue); counter = locateCounter(queue); assertEquals(0, counter.getValue()); } finally { sf.close(); session.close(); } }
@Test public void testNoAutoFailback() throws Exception { locator .setBlockOnNonDurableSend(true) .setBlockOnDurableSend(true) .setFailoverOnInitialConnection(true) .setReconnectAttempts(-1); ClientSessionFactoryInternal sf = createSessionFactoryAndWaitForTopology(locator, 2); ClientSession session = sendAndConsume(sf, true); CountDownSessionFailureListener listener = new CountDownSessionFailureListener(1, session); session.addFailureListener(listener); backupServer.stop(); liveServer.crash(); backupServer.start(); assertTrue(listener.getLatch().await(5, TimeUnit.SECONDS)); ClientProducer producer = session.createProducer(ADDRESS); ClientMessage message = session.createMessage(true); setBody(0, message); producer.send(message); session.removeFailureListener(listener); Thread t = new Thread(new ServerStarter(liveServer)); t.start(); waitForRemoteBackup(sf, 10, false, backupServer.getServer()); assertTrue(backupServer.isStarted()); backupServer.crash(); waitForServerToStart(liveServer.getServer()); assertTrue(liveServer.isStarted()); sf.close(); assertEquals(0, sf.numSessions()); assertEquals(0, sf.numConnections()); }
public void sendMessages(String queueName, int num) throws ActiveMQException { ClientSession session = sessionFactory.createSession(); ClientProducer producer = session.createProducer("jms.queue." + queueName); for (int i = 0; i < num; i++) { ClientMessage m = session.createMessage(true); m.putStringProperty("bridge-message", "hello " + index); index++; producer.send(m); } session.close(); }
private int getMessageEncodeSize(final SimpleString address) throws Exception { ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory cf = createSessionFactory(locator); ClientSession session = cf.createSession(false, true, true); ClientMessage message = session.createMessage(false); // we need to set the destination so we can calculate the encodesize correctly message.setAddress(address); int encodeSize = message.getEncodeSize(); session.close(); cf.close(); return encodeSize; }
@Test public void testPartialQueue() throws Exception { ClientSession session = basicSetUp(); session.createQueue("myAddress", "myQueue1", true); session.createQueue("myAddress", "myQueue2", true); ClientProducer producer = session.createProducer("myAddress"); ClientMessage msg = session.createMessage(true); producer.send(msg); ClientConsumer consumer = session.createConsumer("myQueue1"); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); msg.acknowledge(); consumer.close(); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = createSessionFactory(locator); session = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session); consumer = session.createConsumer("myQueue1"); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNull(msg); consumer.close(); consumer = session.createConsumer("myQueue2"); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); }
@Test public void testGetAddress() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, false); CoreMessagingProxy proxy = createProxy(address); Assert.assertEquals(address.toString(), proxy.retrieveAttributeValue("address")); session.deleteQueue(queue); }
@Test public void testReceiveTimesoutCorrectly() throws Exception { ClientSessionFactory cf = createSessionFactory(locator); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); session.start(); long time = System.currentTimeMillis(); cc.receive(1000); Assert.assertTrue(System.currentTimeMillis() - time >= 1000); session.close(); }
@Test public void testBody2() throws Exception { final String QUEUE_NAME = "A1"; ActiveMQServer server = createServer(true); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory factory = locator.createSessionFactory(); ClientSession session = factory.createSession(false, true, true); session.createQueue(QUEUE_NAME, QUEUE_NAME, true); ClientProducer producer = session.createProducer(QUEUE_NAME); ClientMessage msg = session.createMessage(true); byte[] bodyTst = new byte[10]; for (int i = 0; i < 10; i++) { bodyTst[i] = (byte) (i + 1); } msg.getBodyBuffer().writeBytes(bodyTst); assertEquals(bodyTst.length, msg.getBodySize()); producer.send(msg); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = locator.createSessionFactory(); session = factory.createSession(false, false, true); ClientSession managementSession = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session, managementSession); ClientConsumer consumer = session.createConsumer(QUEUE_NAME); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); assertEquals(msg.getBodySize(), bodyTst.length); byte[] bodyRead = new byte[bodyTst.length]; msg.getBodyBuffer().readBytes(bodyRead); assertEqualsByteArrays(bodyTst, bodyRead); session.close(); locator.close(); server.stop(); }
@Test public void testStopStartMultipleConsumers() throws Exception { locator.setConsumerWindowSize(getMessageEncodeSize(QUEUE) * 33); ClientSessionFactory sf = createSessionFactory(locator); final ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); message.putIntProperty(new SimpleString("i"), i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE); ClientConsumer consumer2 = session.createConsumer(QUEUE); ClientConsumer consumer3 = session.createConsumer(QUEUE); session.start(); ClientMessage cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); cm = consumer2.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); cm = consumer3.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); session.stop(); cm = consumer.receiveImmediate(); Assert.assertNull(cm); cm = consumer2.receiveImmediate(); Assert.assertNull(cm); cm = consumer3.receiveImmediate(); Assert.assertNull(cm); session.start(); cm = consumer.receive(5000); Assert.assertNotNull(cm); cm = consumer2.receive(5000); Assert.assertNotNull(cm); cm = consumer3.receive(5000); Assert.assertNotNull(cm); session.close(); }
private void dotestMultipleGroupingXACommit() throws Exception { ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory sessionFactory = createSessionFactory(locator); ClientSession clientSession = sessionFactory.createSession(true, false, false); ClientProducer clientProducer = this.clientSession.createProducer(qName); ClientConsumer consumer = clientSession.createConsumer(qName); ClientConsumer consumer2 = clientSession.createConsumer(qName); clientSession.start(); Xid xid = new XidImpl("bq".getBytes(), 4, "gtid".getBytes()); clientSession.start(xid, XAResource.TMNOFLAGS); SimpleString groupId = new SimpleString("grp1"); SimpleString groupId2 = new SimpleString("grp2"); int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(clientSession, "m" + i); if (i % 2 == 0 || i == 0) { message.putStringProperty(Message.HDR_GROUP_ID, groupId); } else { message.putStringProperty(Message.HDR_GROUP_ID, groupId2); } clientProducer.send(message); } CountDownLatch latch = new CountDownLatch(numMessages); DummyMessageHandler dummyMessageHandler = new DummyMessageHandler(latch, true); consumer.setMessageHandler(dummyMessageHandler); DummyMessageHandler dummyMessageHandler2 = new DummyMessageHandler(latch, true); consumer2.setMessageHandler(dummyMessageHandler2); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); clientSession.commit(xid, false); Assert.assertEquals(dummyMessageHandler.list.size(), 50); int i = 0; for (ClientMessage message : dummyMessageHandler.list) { Assert.assertEquals(message.getBodyBuffer().readString(), "m" + i); i += 2; } Assert.assertEquals(dummyMessageHandler2.list.size(), 50); i = 1; for (ClientMessage message : dummyMessageHandler2.list) { Assert.assertEquals(message.getBodyBuffer().readString(), "m" + i); i += 2; } consumer.close(); consumer2.close(); consumer = this.clientSession.createConsumer(qName); Assert.assertNull(consumer.receiveImmediate()); clientSession.close(); locator.close(); }
private void deleteSubscriberQueue(QueueConsumer consumer) { String subscriptionName = consumer.getId(); ClientSession session = null; try { session = sessionFactory.createSession(); session.deleteQueue(subscriptionName); } catch (ActiveMQException e) { } finally { if (session != null) { try { session.close(); } catch (ActiveMQException e) { } } } }
@Test public void testLoadBalanceGroups() throws Exception { Assume.assumeFalse( "only makes sense withOUT auto-group", clientSessionFactory.getServerLocator().isAutoGroup()); ClientProducer clientProducer = clientSession.createProducer(qName); ClientConsumer consumer1 = clientSession.createConsumer(qName); ClientConsumer consumer2 = clientSession.createConsumer(qName); ClientConsumer consumer3 = clientSession.createConsumer(qName); ClientConsumer[] consumers = new ClientConsumer[] {consumer1, consumer2, consumer3}; int[] counts = new int[consumers.length]; clientSession.start(); try { // Add all messages for a particular group before moving onto the next for (int group = 0; group < 10; group++) { for (int messageId = 0; messageId < 3; messageId++) { ClientMessage message = clientSession.createMessage(false); message.putStringProperty("_AMQ_GROUP_ID", "" + group); clientProducer.send(message); } } for (int c = 0; c < consumers.length; c++) { while (true) { ClientMessage msg = consumers[c].receiveImmediate(); if (msg == null) { break; } counts[c]++; } } for (int count : counts) { Assert.assertNotEquals( "You shouldn't have all messages bound to a single consumer", 30, count); Assert.assertNotEquals( "But you shouldn't have also a single consumer bound to none", 0, count); } } finally { consumer1.close(); consumer2.close(); consumer3.close(); } }
@Test public void testBasicReceive() throws Exception { ClientSessionFactory cf = createSessionFactory(locator); ClientSession sendSession = cf.createSession(false, true, true); ClientProducer cp = sendSession.createProducer(addressA); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); session.start(); cp.send(sendSession.createMessage(false)); Assert.assertNotNull(cc.receive()); session.close(); sendSession.close(); }
@Test public void testBasicSend() throws Exception { SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); SimpleString adName = new SimpleString("ad1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(adName.toString(), addressSettings); SimpleString dlq = new SimpleString("DLQ1"); clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(adName, qName, null, false); ClientProducer producer = clientSession.createProducer(adName); producer.send(createTextMessage(clientSession, "heyho!")); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); clientConsumer = clientSession.createConsumer(dlq); m = clientConsumer.receive(500); Assert.assertNotNull(m); assertEquals("q1", m.getStringProperty(Message.HDR_ORIGINAL_QUEUE)); assertEquals("ad1", m.getStringProperty(Message.HDR_ORIGINAL_ADDRESS)); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); }