0
如何配置MassTransit在失敗之前重試context.Publish()
,例如,當RabbitMQ服務器暫時不可用時?如何配置MassTransit以在發生故障時重試context.Publish()?
如何配置MassTransit在失敗之前重試context.Publish()
,例如,當RabbitMQ服務器暫時不可用時?如何配置MassTransit以在發生故障時重試context.Publish()?
在這種情況下重試的問題是,Publish
調用失敗的唯一原因是代理連接丟失(出於任何原因:網絡等)。
在這種情況下,用於接收消息的連接也會丟失,這意味着連接到代理的另一個節點可能已經提取了消息。因此,在這種情況下重試會很糟糕,因爲它會重新連接到代理併發送,但之後消息無法被確認(因爲它很可能在另一個線程/工作人員身上找到)。
這裏通常的做法是讓它失敗,當接收端點重新連接時,消息將被重新發送給消費者,消費者然後將呼叫Publish
並達到期望的結果。
您應該確保您的消費者可以正確處理此問題(搜索idempotent)以避免導致業務邏輯中斷的故障。