如何在 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);
第二个选项将用于重要消息,其中不能选择丢失消息。如果您的消费进程崩溃并且无法确认该消息,则该消息将返回到队列中。
我正在使用 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);
第二个选项将用于重要消息,其中不能选择丢失消息。如果您的消费进程崩溃并且无法确认该消息,则该消息将返回到队列中。