最近公司要上一個新項目。可能要整合以前的一些系統。現在考慮是用esb企業總線進行管理。初步定的是wso2。基于apache synapse。
1.一般的esb流程是什么樣子的?
是不是主系統發生soap請求。esb接收并且轉換成jms然后子系統監聽jms。最后得到數據。
還是。jms僅僅是內部轉換。soap請求在esb轉成jms后。加入隊列。然后再轉成soap調用子系統?
2.使用jms的考慮是jms對隊列的信息進行持久化。防止比如子系統突然掛掉了。消息丟失。
但是有個問題。是esb自動監聽jms的隊列的話。會導致直接消費了。而數據沒有存在隊列中。還是會出現消息丟失的問題。
這個應該怎么解決。
3.esb進行協議之間的轉換。每種方式都需要些一個轉換方式么?有沒有什么通用的。或者是自動轉換的。比如soap和jms的互相轉換。不是協議切換。是內容轉換。
4.如果大家有討論esb的群。或者有高手愿意指點一下。謝謝了。
------------------------------------------------------------------
1,一般ESB的流程,
先是整理需連接的系統,需要連接的系統功能(一般管它叫服務),確定服務的依賴關系,支持的協議(文件,WebService, RPC,...),調用的方式(同步/異步)
然后使用ESB提供的那些協議組件,一點點串起來就行。串的方式可以參考EIP (www.eaipatterns.com)
你說的兩種異步方式的話都可以,
如果是同步的,也可以直接soap -> soap, 不用JMS。 一般用JMS是為了實現異步通訊
2,JMS,至少我接觸的ActiveMQ, 是可以支持事務的,發生異常,可以不消費信息
3,協議轉換是為了配合你那些需要整合的系統,如果都是SOAP,也就不需要轉了。
消息內容轉換(格式,內容),一般ESB都提供各種工具的。
------------------------------------------------------------------
1、如果你要做同步轉異步,可以在esb上做成ws轉jms,然后起到一個緩沖的作用。
最后可以再同步的返回給調用方。
你也可以修改調用方為jms方式,這樣就是徹底的異步了,在esb端可以jms轉ws,調用業務服務方的ws。
2、esb都支持事務的,jms中如果不確認消息的話,不會從持久存儲去delete掉的。
一般的esb。也可以做成是esb消費掉消息,然后存入esb自己內置的jms provider中,這樣你再消費的話,也是可靠的。還可以做成補償機制的,即esb中如何消息處理失敗,把消費放回去原來的queue或是一個中間的臨時queue,稍后做recover。
3、從esb的不同transport進去的數據,在esb的中介層處理時,其實消息格式都是一致的、通用的。也就是說常見的ws或jms轉換在一般的esb里處理都很簡單。如果稍微復雜點,也很容易擴展transformer(比如通過xslt做xml格式轉換)來實現數據內容和格式的轉換。