/** * Creates a new {@link QueueConsumer}. For every message received (or when the timeout waiting for messages is hit), the callback * is invoked with the message received. */ public QueueConsumer createQueueListener(final String name, final ConsumerCallback messageCallback) { Preconditions.checkState(connectionFactory != null, "connection factory was never injected!"); return new QueueConsumer(connectionFactory, amqpConfig, name, messageCallback); } }
@Override protected void connectCallback(final Channel channel) throws IOException { super.connectCallback(channel); if (getConfig().isDeclaring()) { channel.queueDeclare(getName(), getConfig().isDurable(), getConfig().isExclusive(), getConfig().isAutoDelete(), null); } channel.basicConsume(getName(), false, getConsumer()); } }
@Test public void stopConsumerWithNoMessages() throws Exception { final QueueConsumer queueConsumer = queueRunnableFactory.createQueueListener("test-queue", new DummyMessageCallback()); Assert.assertNotNull(queueConsumer); final Thread queueThread = new Thread(queueConsumer); queueThread.start(); Thread.sleep(2000L); Assert.assertTrue(queueConsumer.isConnected()); queueConsumer.shutdown(); queueThread.interrupt(); queueThread.join(); }
@Test public void testProduceConsume() throws Exception { final CountingMessageCallback cmc = new CountingMessageCallback(); final QueueConsumer queueConsumer = queueRunnableFactory.createQueueListener("test-queue", cmc); final QueuePublisher<Object> queuePublisher = queueRunnableFactory.createQueueJsonPublisher("test-queue"); final Thread consumerThread = new Thread(queueConsumer); final Thread producerThread = new Thread(queuePublisher); consumerThread.start(); producerThread.start(); Thread.sleep(1000L); Assert.assertTrue(queueConsumer.isConnected()); Assert.assertFalse(queuePublisher.isConnected()); final int maxCount = 1000; for (int i = 0; i < maxCount; i++) { queuePublisher.put(format("hello, world %d", i)); } Thread.sleep(DRAIN_SLEEP); Assert.assertTrue(queuePublisher.isEmpty()); Assert.assertEquals(maxCount, cmc.getCount()); queuePublisher.shutdown(); queueConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt(); producerThread.join(); consumerThread.join(); }
Assert.assertTrue(queueConsumer1.isConnected()); Assert.assertTrue(queueConsumer2.isConnected()); Assert.assertFalse(queuePublisher.isConnected()); queueConsumer1.shutdown(); queueConsumer2.shutdown(); producerThread.interrupt(); consumerThread1.interrupt();
Assert.assertTrue(queueConsumer1.isConnected()); Assert.assertTrue(queueConsumer2.isConnected()); Assert.assertFalse(queuePublisher1.isConnected()); Assert.assertFalse(queuePublisher2.isConnected()); queueConsumer1.shutdown(); queueConsumer2.shutdown(); producerThread1.interrupt(); producerThread2.interrupt();
Assert.assertTrue(queueConsumer.isConnected()); Assert.assertFalse(queuePublisher1.isConnected()); Assert.assertFalse(queuePublisher2.isConnected()); queueConsumer.shutdown(); producerThread1.interrupt(); producerThread2.interrupt();