解决软件连接RabbitMQ突发System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接异常
一、问题描述
系统再运行时,突然出现
System.Exception: [RabbitMQ.Send Error] RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Library, code=541, text=“Unexpected Exception”, classId=0, methodId=0, cause=System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 —> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
二、问题排除与解决
-
排查所有相关系统,发现生产者都再相同时间出现类似报错,其他消费者的系统没有明显异常
-
基本锁定问题根源在以下两点:
a. 网络异常,生产者所在服务器与MQ服务器之间存在偶发性网络异常
b. MQ服务器异常 -
排查MQ Overview,MQ内存、磁盘都是正常,但很快注意到一点,MQ的连接数出奇的高
-
排查连接细节,发现大量消费者系统中创建的连接对象
-
排查消费者系统,发现代码逻辑问题,创建的消费者连接信息残留未被销毁导致。