我们正在使用MassTransit(3.5.2)和RabbitMQ(3.6.6)。我们遇到的问题是永远不会从队列中删除的消息(即使我们已经阅读并使用了消息)。 要从队列中读取,我们已经实现了IConsumer类。
我们唯一要做的就是关闭发件人(突然)。 之后,消息永远不会被确认,而且rabbitmq会继续向我们的消费者发送相同的消息。
有没有其他人遇到同样的问题,你是如何解决这个问题的?
::来自comments ::
的更新我们已经检查过日志文件并说:“关闭AMQP连接< 0.18285.1>([:: 1]:57008 - > [:: 1]:5672):客户端意外关闭TCP连接” 。 这并不觉得奇怪,因为我实际上通过杀死.exe文件意外关闭了tcp连接:)
关于来自masstransit的日志文件,我们也做了这个,我们没有收到任何错误,我们只收到两条调试消息。 我们收到的一个,我们发送的结果。 DEBUG 47 MassTransit.Messages - RECEIVE rabbitmq:// localhost / [VirtualHost] / [ConsumerName] N / A ContractCommand CommandConsumer(00:00:00.0364932) DEBUG 30 MassTransit.Messages - 发送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时,我们进入无限循环。 (并且在无限循环中我没有得到任何MessagenNotConfirmedException)。 另外,为了让我的消费者再次正常工作,我需要重启我的消费者然后它将是ACK / NACK。
MessageNotConfirmedMessage:“mscorlib.dll中的'MassTransit.RabbitMqTransport.MessageNotConfirmedException'附加信息:rabbitmq:// localhost / [VirtualHost] / bus- [ComputerName] - [Servi ce] .Server.vshost-4b ayyydsf9rfsf3ybdkgxg 5h8b => RabbitMQ未确认该消息 'RabbitMQ.Client.Exceptions.AlreadyClosedException'附加信息:已经关闭:AMQP操作被中断:AMQP关闭原因,由Peer发起,代码= 404,text =“NOT_FOUND - 无交换'总线 - [ComputerName] - [ServiceName ] .Server.vshost-4bayyydsf9rf s3qzbdkgx8bbr1'在vhost'[VirtualHost]'“,classId = 60,methodId = 40,cause =
答案 0 :(得分:1)
我已更新我们的代码以使用MassTransit 3.5.7,之后我无法重现此问题。
答案 1 :(得分:0)
处理完队列对象后,可以通过BasicAck(e.DeliveryTag, false)