/** * Creates a new {@link QueuePublisher}. The Publisher accepts arbitrary objects and uses the Jackson object mapper to convert them into * JSON and sends them as a text message. */ public <T> QueuePublisher<T> createQueueJsonPublisher(final String name) { Preconditions.checkState(connectionFactory != null, "connection factory was never injected!"); return new QueuePublisher<T>(connectionFactory, amqpConfig, name, jsonPublisherCallback); }
@Override protected void publish(final PublisherData publisherData) throws IOException { final Channel channel = channelConnect(); // A queue is a routing key on the default exchange... channel.basicPublish("", getName(), publisherData.getProperties(), publisherData.getData()); } }
@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(); }
@Test public void stopProducerWithNoMessages() throws Exception { final QueuePublisher<Object> queuePublisher = queueRunnableFactory.createQueueJsonPublisher("test-queue"); Assert.assertNotNull(queuePublisher); final Thread queueThread = new Thread(queuePublisher); queueThread.start(); Thread.sleep(2000L); Assert.assertFalse(queuePublisher.isConnected()); queuePublisher.shutdown(); queueThread.interrupt(); queueThread.join(); }
Assert.assertFalse(queuePublisher1.isConnected()); Assert.assertFalse(queuePublisher2.isConnected()); queuePublisher1.put(format("hello, world %d", i)); queuePublisher2.put(format("hello, wold %d", i)); Assert.assertTrue(queuePublisher1.isEmpty()); Assert.assertTrue(queuePublisher2.isEmpty()); Assert.assertEquals(maxCount*2, cmc.getCount()); queuePublisher1.shutdown(); queuePublisher2.shutdown(); queueConsumer.shutdown(); producerThread1.interrupt();
Assert.assertFalse(queuePublisher1.isConnected()); Assert.assertFalse(queuePublisher2.isConnected()); queuePublisher1.put(format("hello, world %d", i)); queuePublisher2.put(format("hello, wold %d", i)); Assert.assertTrue(queuePublisher1.isEmpty()); Assert.assertTrue(queuePublisher2.isEmpty()); queuePublisher1.shutdown(); queuePublisher2.shutdown(); queueConsumer1.shutdown(); queueConsumer2.shutdown();
/** * Creates a new {@link QueuePublisher}. The callback is called to convert an object that is sent into the QueuePublisher * into an AMQP byte array.. */ public <T> QueuePublisher<T> createQueuePublisher(final String name, final PublisherCallback<T> messageCallback) { Preconditions.checkState(connectionFactory != null, "connection factory was never injected!"); return new QueuePublisher<T>(connectionFactory, amqpConfig, name, messageCallback); }
Assert.assertFalse(queuePublisher.isConnected()); queuePublisher.put(format("hello, world %d", i)); Assert.assertTrue(queuePublisher.isEmpty()); Assert.assertEquals(maxCount, cmc1.getCount() + cmc2.getCount()); queuePublisher.shutdown(); queueConsumer1.shutdown(); queueConsumer2.shutdown();
/** * Creates a new {@link QueuePublisher}. The Publisher accepts strings and sends them as a text message. */ public QueuePublisher<String> createQueueTextPublisher(final String name) { Preconditions.checkState(connectionFactory != null, "connection factory was never injected!"); return new QueuePublisher<String>(connectionFactory, amqpConfig, name, stringPublisherCallback); }