/** * Creates a new {@link ExchangeConsumer}. For every message received (or when the timeout waiting for messages is hit), the callback * is invoked with the message received. */ public ExchangeConsumer createExchangeListener(final String name, final ConsumerCallback messageCallback) { Preconditions.checkState(connectionFactory != null, "connection factory was never injected!"); return new ExchangeConsumer(connectionFactory, amqpConfig, name, messageCallback); }
@Override protected void connectCallback(@Nonnull final Channel channel) throws IOException { super.connectCallback(channel); if (getConfig().isDeclaring()) { channel.exchangeDeclare(getName(), getConfig().getExchangeType(), getConfig().isDurable(), getConfig().isAutoDelete(), null); } final String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, getName(), routingKey); channel.basicConsume(queueName, false, getConsumer()); } }
@Test public void stopConsumerWithNoMessages() throws Exception { final ExchangeConsumer exchangeConsumer = exchangeRunnableFactory.createExchangeListener("test-topic", new DummyMessageCallback()); Assert.assertNotNull(exchangeConsumer); final Thread topicThread = new Thread(exchangeConsumer); topicThread.start(); Thread.sleep(2000L); Assert.assertTrue(exchangeConsumer.isConnected()); exchangeConsumer.shutdown(); topicThread.interrupt(); topicThread.join(); }
Assert.assertFalse(exchangeConsumer.isConnected()); Assert.assertFalse(exchangeProducer.isConnected()); Assert.assertFalse(exchangeConsumer.isConnected()); Assert.assertFalse(exchangeProducer.isConnected()); exchangeConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt();
@Test public void testProduceConsume() throws Exception { final CountingMessageCallback cmc = new CountingMessageCallback(); final ExchangeConsumer topicConsumer = exchangeRunnableFactory.createExchangeListener("test-topic", cmc); final ExchangePublisher<Object> topicProducer = exchangeRunnableFactory.createExchangeJsonPublisher("test-topic"); final Thread consumerThread = new Thread(topicConsumer); final Thread producerThread = new Thread(topicProducer); consumerThread.start(); producerThread.start(); Thread.sleep(1000L); Assert.assertTrue(topicConsumer.isConnected()); Assert.assertFalse(topicProducer.isConnected()); final int maxCount = 1000; for (int i = 0; i < maxCount; i++) { topicProducer.put(format("hello, world %d", i)); } Thread.sleep(DRAIN_SLEEP); Assert.assertTrue(topicProducer.isEmpty()); Assert.assertEquals(maxCount, cmc.getCount()); topicProducer.shutdown(); topicConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt(); producerThread.join(); consumerThread.join(); }
Assert.assertTrue(topicConsumer1.isConnected()); Assert.assertTrue(topicConsumer2.isConnected()); Assert.assertFalse(topicProducer.isConnected()); topicConsumer1.shutdown(); topicConsumer2.shutdown(); producerThread.interrupt(); consumerThread1.interrupt();
Assert.assertTrue(topicConsumer.isConnected()); Assert.assertFalse(topicProducer.isConnected()); Assert.assertTrue(topicConsumer.isConnected()); topicConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt();
Assert.assertTrue(topicConsumer.isConnected()); Assert.assertFalse(topicProducer.isConnected()); Assert.assertTrue(topicProducer.isEmpty()); Assert.assertTrue(topicProducer.isConnected()); Assert.assertFalse(topicConsumer.isConnected()); topicConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt();
Assert.assertTrue(topicConsumer.isConnected()); Assert.assertFalse(topicProducer.isConnected()); Assert.assertTrue(topicProducer.isEmpty()); Assert.assertTrue(topicProducer.isConnected()); Assert.assertFalse(topicConsumer.isConnected()); topicConsumer.shutdown(); producerThread.interrupt(); consumerThread.interrupt();
Assert.assertTrue(topicConsumer1.isConnected()); Assert.assertTrue(topicConsumer2.isConnected()); Assert.assertFalse(topicProducer1.isConnected()); Assert.assertFalse(topicProducer2.isConnected()); topicConsumer1.shutdown(); topicConsumer2.shutdown(); producerThread1.interrupt(); producerThread2.interrupt();
Assert.assertTrue(topicConsumer.isConnected()); Assert.assertFalse(topicProducer1.isConnected()); Assert.assertFalse(topicProducer2.isConnected()); topicConsumer.shutdown(); producerThread1.interrupt(); producerThread2.interrupt();