Node.js 如何将消息放在MQRabbit队列的末尾

Node.js 如何将消息放在MQRabbit队列的末尾,node.js,rabbitmq,node-amqp,Node.js,Rabbitmq,Node Amqp,我正在开发一个能够处理来自RabbitMQ的消息的工作程序 然而,我不确定如何做到这一点 如果我收到一条消息,并且在处理过程中发生错误,我如何将该消息放入队列的末尾 我正在尝试使用nack或reject,但消息总是重新放在第一个位置,其他消息保持冻结 我不明白为什么信息必须放在第一位,我正在尝试“玩”其他选项,如requeue或AllupTo,但它们似乎都不起作用 提前谢谢你 说: 可以使用AMQP方法将消息返回到队列,该方法具有requeue参数(basic.recover、basic.rej

我正在开发一个能够处理来自RabbitMQ的消息的工作程序

然而,我不确定如何做到这一点

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

我正在尝试使用nack或reject,但消息总是重新放在第一个位置,其他消息保持冻结

我不明白为什么信息必须放在第一位,我正在尝试“玩”其他选项,如requeue或AllupTo,但它们似乎都不起作用

提前谢谢你

说:

可以使用AMQP方法将消息返回到队列,该方法具有requeue参数(basic.recover、basic.reject和 basic.nack),或由于在保持未确认状态时通道关闭 信息。任何一种情况都会导致消息在 早于2.7.0的RabbitMQ版本的队列后面。从…起 RabbitMQ 2.7.0版,消息始终保存在队列中 发布顺序,即使存在重新排队或频道 结束

在2.7.0及更高版本中,仍然可以对单个 如果队列具有多个队列,则使用者将观察到无序的消息 订户。这是由于其他订户的行为可能导致的 重新查询消息。从队列的角度来看,消息是 始终按出版顺序保存

记住确认成功的消息,否则它们将不会从队列中删除


如果您需要对被拒绝的邮件进行更多控制,您应该查看。

nack或reject放弃邮件或重新排队邮件

对于您的要求,以下内容可能适用:

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

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


如果处理成功,则什么也不做。ack()已发送到rabbitmq服务器。只需接收下一条消息并对其进行处理。

为什么ack()没有已处理的消息且有错误?确认应该在处理消息之后进行,否则,如果在再次处理或发布消息之前或期间出现问题,该消息将丢失并从队列中删除。您应该拒绝该消息,并决定是否要重新获取或放弃该消息。这完全取决于处理之前或之后何时确认该消息的业务需求。如果在脚本死亡/退出之前执行的最后一个故障转移代码出现任何错误/异常,我们可以将消息发送回队列。如果有少数情况下我们希望将消息放在队列的后面,而不是全部,那么我们可以在处理后保留ack()/nack()/重新发布。我们可以在处理结束时决定ack/nack或重新发布消息。