锁定RabbitMQ队列以防止竞争条件

时间:2014-06-25 09:26:20

标签: rabbitmq

是否有一种简单的方法可以实现类似"锁定"使用ack时防止RabbitMQ队列中的竞争条件?

我有以下问题 - 我有几个客户端使用ack消耗队列。每当客户端收到消息时,他都会确认并处理它。但是,如果由于某种原因处理失败,我希望将消息返回队列。

1 个答案:

答案 0 :(得分:2)

只需处理它然后确认它。 如果处理失败,请使用acknack重新排列邮件。

QueueingConsumer consumer = new QueueingConsumer(channel);
boolean autoAck = false;
channel.basicConsume("hello", autoAck, consumer);


QueueingConsumer.Delivery delivery = consumer.nextDelivery();
//do your processing    
boolean requeue = false;
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), requeue);