本地允许正常,发布到服务器上遇到如下异常:
RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> System.IO.IOException: connection.start was never received, likely due to a network timeout<br/> 在 RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()<br/> 在 RabbitMQ.Client.Framing.Impl.Connection.Open(Boolean insist)<br/> 在 RabbitMQ.Client.Framing.Impl.Connection..ctor(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler, String clientProvidedName)<br/> 在 RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(IFrameHandler fh)<br/> 在 RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(IEndpointResolver endpoints)<br/> 在 RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)<br/> --- 内部异常堆栈跟踪的结尾 ---<br/> 在 RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)<br/> 在 RabbitMQ.Client.ConnectionFactory.CreateConnection(String clientProvidedName)<br/>
折腾了一天,最终把 web项目中 用Nuget 也安装引用下 “RabbitMQ.Client” ,重新发布即可。
再次踩坑,又一Web项目虽然在Nuget上已经重新安装引用了 “RabbitMQ.Client” 但发布到服务器上在发布RabbitMq任务时还是报以上错误,同样的本地运行时一切正常。
最终通过一个个对比,发现“RabbitMQ.Client”程序集依赖的一个程序集“System.Buffers”和运行正常的项目中的dll文件大小、日期。版本有区别,最终在Nuget上卸载干净“RabbitMQ.Client”程序集以及其依赖的两个程序集“System.Buffers”和“System.Memory”,然后再重新安装“RabbitMQ.Client” 发布到服务器上结果一切运行正常啦!
总结:
都是 “RabbitMQ.Client”以及其依赖项“System.Buffers”和“System.Memory” 版本 埋的坑
后面在新的项目上,引用“RabbitMQ.Client”时 务必将其依赖项卸载干净,然后用Nuget一次性重新安装。