我正在开发一个使用Rabbit MQ的消息应用程序。我使用显式ACK:
当处理消息出现错误并且RabbitMQ没有收到ACK时,它会将消息以不同的顺序返回到队列中。例如,有消息M1、M2、M3、M4,如果M2被发送回队列,则顺序变成了M3、M4、M2。是否有任何方法可以保持交付顺序?注意:我只有一个消费者和RabbitMQ 3.6.6,但我仍然遇到重新排序的问题。
model.BasicConsume(queueName,false, consumer);
在处理消息后执行ACK:
consumer.Received += (ch, ea) =>
{
try
{
var message = Encoding.UTF8.GetString(ea.Body);
Logger.Info($"DeliveryTag={ea.DeliveryTag}, message={message}");
((EventingBasicConsumer)ch).Model.BasicAck(ea.DeliveryTag, false);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
};
当处理消息出现错误并且RabbitMQ没有收到ACK时,它会将消息以不同的顺序返回到队列中。例如,有消息M1、M2、M3、M4,如果M2被发送回队列,则顺序变成了M3、M4、M2。是否有任何方法可以保持交付顺序?注意:我只有一个消费者和RabbitMQ 3.6.6,但我仍然遇到重新排序的问题。