如何在RabbitMQ中使用Ack进行C#?

时间:2017-11-07 17:05:35

标签: c# rabbitmq ack

我正在使用RabbitMQ来获取队列中的一些消息。逐一。 这是我的代码片段:

   var data = channel.BasicGet(queue, true);
        if (data != null)
            message = System.Text.Encoding.UTF8.GetString(data.Body);
        else
            message = "";
        return message;

但我想知道如何使用Ack属性?如何确认/取消已阅读的消息?

感谢名单!

1 个答案:

答案 0 :(得分:0)

来自the Docs

  

由于上面的noAck = false,您还必须调用IModel.BasicAck以确认您已成功接收并处理了该消息:

即。 BasicGet

有两种不同的选择

noAck为真

channel.BasicGet(queue, true);

这样,您就不需要确认消息了 - 消息将在BasicGet之后从队列中删除。此用法通常用于低值消息 - 如果在BasicGet之后处理失败,则消息将丢失。

noAck false:

var result = channel.BasicGet(queue, false);
// Process the message here ... e.g. save to DB
// If the processing succeeds, Ack to remove the message
channel.BasicAck(result.DeliveryTag, false);

第二个选项将用于重要消息,其中消息丢失不是一种选择。如果您的使用过程崩溃并且无法确认消息,则会将消息返回到队列中。