我目前正在使用来自RabbitMQClient.dll C#客户端的EventingBasicConsumer,我们生成一个不同的线程来处理传递给消费者的每条消息.
我们遇到了一个奇怪的行为,RabbitMQ服务器有时会因错误而关闭连接missed heartbeats from client, timeout: 60s
.几分钟后,客户报告错误说Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Library, code=541
.我也client unexpectedly closed TCP connection
经常看到这个错误发生.
在某些情况下,客户端可能需要60秒以上的时间来处理一个作业请求,并且在这种情况下会发生此错误.
是否需要在60秒内处理作业?因为对于我们的流程,这可能在30秒到5分钟之间变化.
RabbitMQ服务器:3.6.6 RabbitMQ.Client.dll(C#客户端):RabbitMQ.Client.4.1.1
非常感谢对此问题的任何见解.
您可以增加 RabbitMq 中每个队列和每个消息的 TTL 超时
IBasicProperties mqProps = model.CreateBasicProperties();
mqProps.ContentType = "text/plain";
mqProps.DeliveryMode = 2;
mqProps.Expiration = "300000"
model.BasicPublish(exchangeName,
routingKey, mqProps,
messageBodyBytes);
Run Code Online (Sandbox Code Playgroud)
文档位于 https://www.rabbitmq.com/ttl.html
但我认为最好将其重写为异步模式以实际处理消息。
这可能会给您使用 RabbitMq 进行异步消息处理的灵感
在这个问题中,也有很多关于异步消息消耗的信息。