如何在MQRabbit Queue的末尾添加消息

时间:2016-12-29 02:30:15

标签: node.js rabbitmq node-amqp

我正在处理能够处理来自RabbitMQ的消息的工作者。

但是,我不确定如何做到这一点。

如果我收到一条消息,并且在我处理过程中发生错误,我该如何将消息放入队列的末尾?

我试图使用nack或拒绝,但邮件总是重新放在第一个位置,其他邮件保持冻结状态!

我不明白为什么要把信息放在第一个位置,我试图"玩"与requeue或AllupTo等其他选项一样,但它们似乎都不起作用。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

Documentation说:

  

可以使用具有重新排列参数的AMQP方法将消息返回到队列(basic.recover,basic.reject和   basic.nack),或由于在保持未确认的情况下关闭频道   消息。任何这些情况都会导致消息被重新排队   早于2.7.0的RabbitMQ版本的队列后面。从   RabbitMQ发布2.7.0,消息总是保存在队列中   出版顺序,即使存在重新排队或频道   闭合。

     

对于2.7.0及更高版本,个人仍然可以使用   消费者如果队列有多个,则不按顺序观察消息   订户。这是由于其他订户的行为可能   重新排队消息。从队列的角度来看,消息是   始终保持在出版顺序中。

请记住ack成功的消息,否则不会将其从队列中删除。

如果您需要更多地控制被拒绝的邮件,请查看dead letter exchanges

答案 1 :(得分:0)

nack或拒绝丢弃邮件或重新排队邮件。

对于您的要求可能适合,

消费者收到消息后,在开始处理消息之前,将ack()发送回rabbitmq服务器。

然后处理消息,如果在该过程中发现任何错误,则将相同的消息发送(发布)到同一队列中。这会将消息放在队列的后面。

成功处理后什么都不做。 ack()已经发送到rabbitmq服务器。只需接收下一条消息并进行处理即可。