@Test public void testStopAlreadyStoppedSession() throws Exception { 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); } final ClientConsumer consumer = session.createConsumer(QUEUE); session.start(); for (int i = 0; i < numMessages / 2; i++) { ClientMessage cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); } session.stop(); ClientMessage cm = consumer.receiveImmediate(); Assert.assertNull(cm); session.stop(); cm = consumer.receiveImmediate(); Assert.assertNull(cm); session.start(); for (int i = 0; i < numMessages / 2; i++) { cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); } session.close(); }
@Test public void testStopStartConsumerAsyncSync() throws Exception { 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); } final ClientConsumer consumer = session.createConsumer(QUEUE); session.start(); final CountDownLatch latch = new CountDownLatch(10); // Message should be in consumer class MyHandler implements MessageHandler { boolean failed; boolean started = true; @Override public void onMessage(final ClientMessage message) { try { if (!started) { failed = true; } latch.countDown(); if (latch.getCount() == 0) { message.acknowledge(); started = false; consumer.setMessageHandler(null); } } catch (Exception e) { } } } MyHandler handler = new MyHandler(); consumer.setMessageHandler(handler); waitForLatch(latch); try { session.stop(); } catch (Exception e) { SessionStopStartTest.log.warn(e.getMessage(), e); throw e; } Assert.assertFalse(handler.failed); // Make sure no exceptions were thrown from onMessage Assert.assertNull(consumer.getLastException()); consumer.setMessageHandler(null); session.start(); for (int i = 0; i < 90; i++) { ClientMessage msg = consumer.receive(1000); if (msg == null) { System.out.println("ClientConsumerTest.testStopConsumer"); } Assert.assertNotNull("message " + i, msg); msg.acknowledge(); } Assert.assertNull(consumer.receiveImmediate()); session.close(); }