將MassTransit配置爲容錯以正確處理間歇性RabbitMQ連接問題或RabbitMQ完全關閉的正確方法是什麼?我在兩臺不同的機器之間建立了一個RabbitMQ集羣,並配置了HA,以便鏡像所有內容。我還有一個F5負載均衡器設置爲主動/被動模式,以便所有流量都定向到主節點,但是如果運行狀況檢查失敗,它將故障轉移到次節點。我希望在這種故障恢復之後的任何客戶端連接都能繼續成功,但我在這裏遇到了麻煩。當我在主節點上停止RabbitMQ的,客戶端應用開始記錄一堆MassTransit的錯誤看起來像:MassTransit如何處理RabbitMQ關閉
RabbitMQ connection failed: Connect failed: myrabbithost.mycompany.com:5671/
出現這些錯誤,即使沒有活動正在發生的事情 - 沒有發佈,Client.Request等最終由於MassTransit顯然在連接上放棄了錯誤,並且客戶端應用程序崩潰。在查看MassTransit源代碼時,我認爲它是在「RetryUntilCancelled」方法內部產生這些錯誤的RabbitMqReceiveTransport.Receive。它看起來是使用內部的ConnectionRetryPolicy,那麼有什麼可以在那裏配置?
我正在Global.asax中實例化我的總線實例,啓動它並將其保留在內存中,只要IIS啓動,並且我不知道這是否是問題;在使用Unity容器查看MassTransit的文檔時,看起來建議的做法是允許Unity默認使用TransientLifetimeManager,以便每當容器解析它時總線實例將被拆除並重新創建。這
Task.Run(() => bus.Publish(new TestMessage { Id = num })).Wait();
代替:
您使用的是哪個版本的MassTransit? – sagar
我正在使用MassTransit 3.4.1 – Andy
在過程的整個過程中,保持公交車的存在是正確的。它不應該是短暫的。一旦經紀人變得可用,它也應該重新連接。 –