如何在不使消息出列的情况下浏览rabbitmq中的队列

时间:2016-02-10 18:41:14

标签: java rabbitmq message-queue

我正在尝试获取具有特定相关ID的消息,如rabbitmq docs中所述。但是我看到无关的消息被出列了。我不希望它发生。在得到消息后,我怎么能告诉rabbitmq没有出队,并且知道这不是我想要的那个。请帮帮我。

`

.
.
replyQueueName = channel.queueDeclare().getQueue();
consumer = new QueueingConsumer(channel);
channel.basicConsume(replyQueueName, false, consumer);
while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            System.out.println(delivery.getProperties().getCorrelationId());
            if (delivery.getProperties().getCorrelationId().equals(corrId)) {
                response = new String(delivery.getBody());
                break;
            }
        }

`

2 个答案:

答案 0 :(得分:2)

你不能按照自己想要的方式做你想做的事。 “选择性消费者”是RabbitMQ中的一种反模式。

相反,您应该设计RabbitMQ设置,以便将消息路由到仅包含预期消费者的消息的队列。

我在这里写了更多关于此的内容:http://derickbailey.com/2015/07/22/airport-baggage-claims-selective-consumers-and-rabbitmq-anti-patterns/

答案 1 :(得分:0)

如果您能够承担丢失邮件的顺序,可以使用重新排队机制。

尝试关闭自动确认。

如果没有,则必须重新设计应用程序以注入标头或路由密钥以路由到特定队列。