我知道這對許多人來說似乎相當明顯,但我的客戶正在使用一種我不太方便的模式。我們應該如何處理使用nservicebus的長時間運行過程
情況是,他們的客戶發送通過nservicebus發送到第三方系統的存款或取款。第三方系統需要處理該交易,但交易完成前可能需要幾天甚至幾周的時間。
今天的解決方案是創建一個傳奇,它首先發送一條消息將事務交給第三方系統。完成後,傳奇下一步是檢查完成更新。如果事務未完成,則發送requesttimeout,「等待」。當達到超時時,再次執行相同的檢查,併發送新的requesttimeout ...等等。這有一直是一個永恆的循環。它還做了什麼是一次又一次地完全填充同一個SagaTimeout的ServiceInsight。
我一直在尋找單反,但它似乎缺乏。我只需要針對特定消息進行多次重試,而不是針對所有消息。
要添加,第三方系統不能發送事務已完成,這意味着我們需要輪詢完成更新。
另外,我相信更好的解決方案是保存交易狀態,將交易發送給第三方並完成這個特殊的事件。然後有一個使用時間間隔檢查完成更新的傳奇。
以這種方式使用sagatimeouts是一種常見模式嗎?而且,有一個傳奇/處理程序只檢查完成更新是一個更好的解決方案嗎?
在這種情況下,您是否建議集成服務是一個單獨的端點內的nsb傳奇,基本上只處理超時/輪詢? – Trygve
可能,是的 - 但也許沒有必要使用它的傳奇?投票不能像「System.Timers.Timer」這樣簡單的輪詢一次,並將其發現作爲事件發佈? – mookid8000
這聽起來像mookid8000建議我最初的想法,投票外最初的傳奇。 Trygve說它已經正確實施了。兩者都可以,但是,真正的NServicebus方式是什麼?我最初的想法是,暫停這個傳奇並重新初始化新的遊戲並不是一個好主意......但也許這就是做到這一點的方法 – Per