我正在尝试获取具有特定相关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;
}
}
`
答案 0 :(得分:2)
你不能按照自己想要的方式做你想做的事。 “选择性消费者”是RabbitMQ中的一种反模式。
相反,您应该设计RabbitMQ设置,以便将消息路由到仅包含预期消费者的消息的队列。
我在这里写了更多关于此的内容:http://derickbailey.com/2015/07/22/airport-baggage-claims-selective-consumers-and-rabbitmq-anti-patterns/
答案 1 :(得分:0)
如果您能够承担丢失邮件的顺序,可以使用重新排队机制。
尝试关闭自动确认。
如果没有,则必须重新设计应用程序以注入标头或路由密钥以路由到特定队列。