[英]NServiceBus pattern for working with events from common shared services
我們有一種情況,我們的幾個服務在我們的系統中共享。 例如,跟蹤股票走勢的一種。 每當文章的庫存水平發生變化時,就會引發一個事件。
我們遇到的問題是,雖然有時另一個服務可能對所有庫存變化事件感興趣(例如進行一些聚合),但在大多數情況下,只有作為特定操作結果的庫存變化才有意義。
我們現在面臨的問題是這樣的。 假設有一個 IArticleStockChangedEvent 事件,其中包含商品編號、庫存更改和請求更改的 ProcessId。 每次文章庫存發生變化時都會引發此事件。
現在一些外部服務有一個 saga 來改變 10 篇文章並命令股票服務來做到這一點。 它還實現了 IHandleMessages 以跟蹤進度。 這在理論上很有效,但在實踐中,這意味着包含此 saga 的服務將充斥着無關的 IArticleStockChangedEvent 消息,它將無法找到相應的 saga 實例。 雖然在技術上不會破壞任何東西,但它會導致系統中不必要的延遲。
我並不真的期待為每個可能導致庫存變化的傳奇創建一種新的 IArticleStockChangedEvent。 處理此問題的推薦方法是什么?
謝謝
關於需要將哪些IArticleStockChangedEvent
事件傳遞給服務的知識存在於“外部”服務中並動態更改,因此不可能(或復雜且不可擴展)在 Stock 服務或傳輸中創建過濾器級別(例如服務總線訂閱過濾器)。
為了進行優化,即避免IArticleStockChangedEvent
反序列化,您可以考慮自定義Behavior<IIncomingPhysicalMessageContext>
,您可以在其中從消息頭和查找數據庫中讀取Stock
項目的Id
以查看該庫存項目是否有任何傳奇,如果沒有,則短路消息處理。
更好的解決方案可能是使用回復並回復來自Stock
服務的消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.