【发布时间】:2017-07-03 19:00:30
【问题描述】:
我正在开发一个使用 Rabbit MQ 进行消息传递的应用程序。我使用显式 ACK:
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;
}
};
问题是当处理消息时出现错误并且Rabbit没有收到ACK,它将消息返回到队列中 不同的顺序。。 p>
例如有消息 M1、M2、M3、M4。
如果 M2 被返回到队列中,它将是 M3、M4、M2。
有没有办法保持交货顺序?
附:我只有一个消费者和 RabbitMQ 3.6.6,但我仍然有重新排序的问题。
【问题讨论】:
标签: c# .net rabbitmq message-queue rabbitmq-exchange