本地允許正常,發布到服務器上遇到如下異常:
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一次性重新安裝。