RabbitMQ Java客户端异步主题收据

时间:2013-01-28 22:45:18

标签: java rabbitmq

我有一个通过交换发送和接收消息的程序。无论队列中是否有消息,我的程序都需要继续执行。几乎所有教程都有阻塞示例:

while (true) {
     QueueingConsumer.Delivery delivery = consumer.nextDelivery();
     System.out.println("Message: " + new String(delivery.getBody()));
     ch.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}

我遇到了我所理解的异步版本,即当队列中有消息时调用handleDelivery函数(回调):

 boolean autoAck = false;
 channel.basicConsume(queueName, autoAck, "myConsumerTag",
 new DefaultConsumer(channel) {
     @Override
     public void handleDelivery(String consumerTag,
                                Envelope envelope,
                                AMQP.BasicProperties properties,
                                byte[] body)
         throws IOException
     {
         String routingKey = envelope.getRoutingKey();
         String contentType = properties.contentType;
         long deliveryTag = envelope.getDeliveryTag();
         // (process the message components here ...)
         channel.basicAck(deliveryTag, false);
     }
 });

在阅读完文档后,我仍然不确定上面的代码片段是否确实是异步的,我仍然无法弄清楚如何获取发送的实际消息。请帮忙。

1 个答案:

答案 0 :(得分:1)

没有尝试第二个代码片段,我可以说它可以做你想要的。但是,它可能会这样做,但在内部使用一个线程(在等待新消息时将被阻止)。我所做的是将while循环粘贴到一个新的Thread中,这样只有那个线程被阻塞,你的程序的其余部分才会异常地继续