2012-02-02 42 views
0

我有一個現實生活中的SOA問題,我似乎無法以乾淨的SOA方式解決問題。SOA/SEDA - 循環體系結構

我有許多分佈式生產者的「更新事物」消息被「東西管理器」消耗。

「事物管理器」的功能之一是發佈到主題通知「事物」已更改。這使得其他感興趣的服務能夠對變化做出反應。

其中一個「更新事物」生產者本身就是該主題的聽衆。它只對真正感興趣的來自其他系統的「事物更新」。但它發現自己消耗和處理來自「事物管理器」的更新,它本身首先導致(並且因此已經知道)。幸運的是,反饋循環在這一點上被打破。

如何在乾淨的SOA方式下最好地解決這個問題?我不會將元數據添加到指示消息來源的消息是一個乾淨的解決方案;消息使用者不應該知道消息來自何處或將要發生什麼。

回答

0

當「更新事物」訂閱了「事物管理器」時,它應該能夠設置要訂閱的「事物」的過濾器。所有「更新事物」應該設置的一個過濾器是不要向我發送任何源於我自己的東西。然後,「更新事物」不知道消息的來源,但「事物管理器」會。

+0

感謝凱文 - 數據的性質與原點相同。所以沒有關於數據結構本身的選擇性消費。我認爲你所建議的將是原始更新的創始者標記消息頭 - 這對我來說從SOA角度來說是錯誤的。 其中一個原因是,在事件源和事物管理器之間經常存在很多過程 - 每個過程都必須知道要傳送元數據,而不是用自己的ID替換它... – Mike 2012-02-02 14:21:02

+0

它沒有必須進入消息標題。 「事物管理員」必須有一個訂閱列表來知道誰發送消息。什麼標識其他服務在此列表中調用。將其包含在數據結構中。如果您使用的是不受您控制的服務,並且具有無法更改的明確合同,那麼問題與您從頭開始設計的系統不同。也許我正在假設你正在使用發佈/訂閱設計模式。 – 2012-02-02 15:39:34

+0

啊,但是這將是一個點對點的架構,不幸的是我們有一個pub/sub(基於主題而不是基於隊列)架構。事物管理者不需要知道誰需要告訴他們什麼,它只是做它的工作,而事物如果他們喜歡,就會訂閱和反應。也許這就成了一個問題,就大型SOA系統而言,基於主題的pub/sub是否是好事還是壞事? P2P變得脆弱,但工作流程可以很容易地追蹤和監控。 Pub/Sub不那麼容易,但更容易進化系統。但顯然,也容易引入反饋循環... – Mike 2012-02-02 16:24:43