我正在使用RabbitMQ来获取队列中的一些消息。逐一。 这是我的代码片段:
var data = channel.BasicGet(queue, true);
if (data != null)
message = System.Text.Encoding.UTF8.GetString(data.Body);
else
message = "";
return message;
但我想知道如何使用Ack属性?如何确认/取消已阅读的消息?
感谢名单!
答案 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);
第二个选项将用于重要消息,其中消息丢失不是一种选择。如果您的使用过程崩溃并且无法确认消息,则会将消息返回到队列中。