2017-09-15 99 views
1

我有一個建築設計問題。我們公司最近爲案例管理帶來了COTS(基於.NET的產品)。該產品具有一個複雜的集成模塊,可在每個用戶操作中將完整的案例信息XML提供給MQ。每個XML元素都有一個Add,Edit & Delete標誌來知道哪些元素髮生了變化。與動態客戶端集成

我們必須編寫一個應用程序,它們按順序處理這些事件,並在發生更改時有條件地發送給多個外部夥伴。與每個外部合作伙伴的接口在他們所需的數據,表示(XML,String,Json等)和協議(SOAP,REST,MQ,DB-call等)方面是截然不同的。

關於如何設計一個這樣的系統以及可以使用哪些技術的任何建議? (FYI,我們現有的技術堆棧Java/JEE,Weblogic)。

PS。 我與此有關的主要問題是,如果合作伙伴之一倒閉,我們不應該阻止其他合作伙伴。同時,任何合作伙伴都不應該放棄一個單一的通知。

謝謝。

回答

1

一種可能的方法:

enter image description here

  • COTS把有關應用程序的事件到消息隊列的消息。
  • 消息生成器組件偵聽消息隊列並查詢關於當前已知夥伴的夥伴DB。對於每個COTS消息,都會爲每個合作伙伴生成一條事件消息,通知所發生的事情。該活動還將有一個「交付」標誌。所以基本上,您將由COTS填充的消息隊列轉換爲N個消息隊列,每個隊列一個。您的事件應該是不可變的對象,您可以將它們存儲在關係數據庫或NoSQL DB(圖片中的「消息DB」)中。
  • 您的應用程序服務器中運行N個或更少的端點組件。當他們到達一個請求時,他們會詢問一個公共組件(圖片中的「常見數據檢索問題」)以獲取新消息。 公共組件查詢消息數據庫,將消息作爲Java對象列表進行交接,端點組件關心序列化。 通用組件還可以使用來自合作伙伴數據庫的信息來關心授權。

注意:通用組件只應標記發佈的消息(如果它們已成功發送)。您可能想要等待來自合作伙伴組件的確認。 由於您無法在該流程中保證交易原子級,您的合作伙伴客戶端需要對重複進行強健的處理。 您的服務器軟件,以及每個客戶應管理每個事件的消息ID(UUID):

  • 你的工作就是關心生成每個事件消息

  • 的作業的唯一ID您合作伙伴正在維護一個查找表來檢查他們是否已經使用某個ID處理了evenet。