如何在 RabbitMQ for C# 中使用 Ack?

How to use Ack in RabbitMQ for C#?

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

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

但是我想知道如何使用Ack 属性?我如何 confirm/cancel 已阅读的消息?

谢谢!

来自the Docs

Since noAck = false above, you must also call IModel.BasicAck to acknowledge that you have successfully received and processed the message:

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);

第二个选项将用于重要消息,其中不能选择丢失消息。如果您的消费进程崩溃并且无法确认该消息,则该消息将返回到队列中。