簡體   English   中英

用於處理來自公共共享服務的事件的 NServiceBus 模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM