RabbitMQ 稍后确认消息

Ada*_*mon 1 .net indexing queue rabbitmq

为了避免队列读取器进程崩溃时的数据丢失,我们需要从 RabbitMQ 获取未确认的消息。对于每 1000 条消息,我们将消息数据提交到磁盘,然后这些消息可以标记为已确认和已消费。有没有办法让它们不被承认,然后专门针对我们刚刚得到的那些?例如,我们能否将它们添加到列表中,然后遍历该列表以查找消息?这是在 RabbitMQ .net 仅供参考。

Jea*_*ron 5

是的,您可以使用来自 RabbitMQ 的消息并明确确认您成功处理的消息。您可以在 RabbitMQ 网站上的第二个教程中找到完整示例。但这里是本教程的相关部分:

  1. 设置使用者时,将noAck("no manual ack") 设置为 false,以便 .NET 客户端库不会自动确认消息:

    channel.BasicConsume(queue: "task_queue", noAck: false, consumer: consumer);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的消费者回调中,您明确地确认了一条消息:

    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
    
    Run Code Online (Sandbox Code Playgroud)

您可以确认一条消息(multiple为假),也可以确认直到并包括这条消息(multiple为真)的所有消息。

您还可以“取消确认”消息,例如,RabbitMQ 可以将其重新排队并将其发送给另一个工作人员。与确认一样,您可以判断是否要取消确认一条或所有消息。此外,您可以将该requeue标志设置为 true 或 false,以指示消息是否应重新排队或丢弃。