我有几个消息生成线程,这些线程仅很少发布消息(例如,短消息突发,然后休眠6个小时)。在发布后启动新连接并关闭它更好吗?还是通过心跳使连接保持活动状态更好?
关于使用者线程。处理每条消息并不需要很长时间(在心跳间隔内),但是在大多数情况下,接收方连接处于空闲状态,因为没有消息在发布。我注意到,如果连接闲置时间过长,连接将被断开。这是预期的行为吗?我以为只有在长时间运行的消息处理功能阻塞了整个使用者线程时,连接才会断开,从而在整个心跳间隔内都无法接收到心跳。
答案 0 :(得分:0)
据我所知,发送完成后,您可以关闭生产者连接而不必担心任何事情。
在与消费者打交道时,必须小心。 RabbitMQ使用连接来确定消费者的生活状况。如果连接关闭或断开,rabbit会认为此使用者已完成或已死。
换句话说,如果在邮件处理过程中未启用自动确认(自动确认),则邮件状态将为nack,表示尚未确认。如果您现在断开消费者连接,rabbit将认为该消费者已死亡,并将消息置于status = ready,因此来自消费者组的其他消费者可以接听此消息。
在您的情况下,连接断开可能表明存在某些问题,建议您打开调试模式以查看来自使用方Rabbit客户端的详细调试消息。另外,您也可以检查Rabbit服务器,那里可能也有一些线索。