使用 RabbitMQ 永不结束消息

Never ending messages with RabbitMQ

我们正在使用 MassTransit(3.5.2) 和 RabbitMQ(3.6.6)。我们遇到了一个永远不会从队列中删除的消息的问题(即使我们已经阅读并使用了该消息)。 为了从队列中读取,我们实现了一个 IConsumer class。

我们唯一要做的就是关闭发件人(突然)。 在那之后,消息永远不会得到确认,并且 rabbitmq 一直继续向我们的消费者发送相同的消息。

有没有其他人遇到同样的问题,你是如何解决这个问题的?

:: 根据评论更新::

我们已经检查了日志文件,它说:"closing AMQP connection <0.18285.1> ([::1]:57008 -> [::1]:5672): client unexpectedly closed TCP connection "。 这并不觉得奇怪,因为我实际上是通过杀死 .exe 文件意外关闭了 tcp 连接:)

关于来自 masstransit 的日志文件,我们也这样做了,我们没有收到任何错误,我们只收到两条调试消息。 一份我们已经收到,一份我们正在发送结果。 调试 47 MassTransit.Messages - 接收 rabbitmq://localhost/[VirtualHost]/[ConsumerName] N/A ContractCommand CommandConsumer(00:00:00.0364932) DEBUG 30 MassTransit.Messages - SEND rabbitmq://localhost/[VirtualHost]/bus-[ComputerName]-[Sende‌ rName].Server.vshost‌ -4bayyydsf9rfs3qzbdk‌ gx8bbr1?durable=fals‌ e&autodelete=true d0700000-762f-c85b-f03a-08d4679c39d4 结果

我对我的消费者所做的一个观察是,在我强制关闭我的发件人的同时,我收到一个 MessageNotConfirmedException,然后是来自 RabbitMQ 的一些 AlreadyClosedException。 在那之后,当 MT 没有设置 ACK/NACK 时,我们进入了无限循环。 (在无限循环中我没有得到任何 MessageNotConfirmedException)。 此外,为了让我的消费者再次正常工作,我需要重新启动我的消费者,然后它将被 ACK/NACKed。

MessageNotConfirmedMessage: "'MassTransit.RabbitMqTransport.MessageNotConfirmedException‌​' in mscorlib.dll 附加信息:rabbitmq://localhost/[VirtualHost]/bus-[ComputerName]-[Servi‌ ce].Server.vshost- 4b‌ ayyydsf9rfsf3ybdkgxg‌ 5h8b => 该消息未被 RabbitMQ 确认 'RabbitMQ.Client.Exceptions.AlreadyClosedException'附加信息:已关闭:AMQP操作被中断:AMQP关闭原因,由Peer发起,code=404,text="NOT_FOUND - no exchange 'bus-[ComputerName]-[ServiceName].Server.vshost-4bayyydsf9rf‌​s3qzbdkgx8bbr1' in vhost '[VirtualHost]'",classId=60,methodId=40 , 原因=

处理完队列对象后,可以通过 BasicAck(e.DeliveryTag, false)

将其标记为成功

我已更新我们的代码以使用 MassTransit 3.5.7,之后我无法重现此问题。