2015-05-22 87 views
2
的不同實現

我想爲了部署ActiveMQ的連接,並與JMS如WebsphereMQ,TIBCO EMS,甲骨文的WebLogic JMS等設置的ActiveMQ橋來連接到MOM

的其他MOM實現通信,就正如我在線研究的,通過在activemq之上構建所謂的網橋,可以與另一端進行通信,無論每個jms實現使用的底層線路協議如何,似乎都是可能的。

雖然實例很少,而且通常時間最少,所以我很困惑的一點是,是否需要在我的類路徑和橋配置中包含來自每個此類實現(Weblogic,WebsphereMQ,TIBCO EMS等)的jms客戶端jar。這可以做到沒有任何這樣的罐子?

由於我們的目標是連接到不同的組織MOM,所以我想避免使用任何第三方,有潛在許可的罐子。

回答

5

...混亂的一點是我是否需要在我的類路徑和橋樑結構中,每個這樣的實現方式(的Weblogic,WebSphere MQ的,TIBCO EMS等) 包括JMS客戶罐子 。這可以完成沒有任何 這樣的罐子?

TL; DR:您需要供應商的專有類。

JMS定義了API並將線路格式和其他實現細節留給傳輸供應商。此外,在專有實現中,導線格式可以顯着改變版本。 (專有代碼的一個優點是能夠在進行如此大的結構更改時提高性能,可靠性或功能。)

兩個JMS實現具有共同性的地方是消息在內存中的位置。由於所有傳輸供應商的實現都從相同的Java JMS類繼承,因此通常可以實例化來自兩個不同傳輸供應商的消息對象並將其從一個複製到另一個。要做到這一點,您必須必須有每個支持運輸供應商的罐子。

事實上,這是我使用過的大多數JMS橋接產品的工作原理。橋代碼使用完全合格的類名來引用來自兩個不同供應商的類。然後它會創建兩個連接工廠,一個用於每個運輸,另一個用於兩個不同的目的地,每個運輸也有一個。然後它從一個提供程序的隊列中讀取消息,將其複製到另一個傳輸提供程序上的消息對象,然後寫入消息。

這種方法當然有很多「陷阱」。我將列出幾個明顯的例子:

  • 跨供應商映射目標是手動的。
  • 身份傳播不可執行,並要求網橋具有準管理權限或全管理權限。
  • 跨供應商的交易性最多是困難的,最壞的情況是不可能的。
  • 相關標識符必須由橋映射,如果它們完全映射的話。這使橋接更加複雜,並要求它使用數據庫或其他永久性存儲。
  • 特定於供應商的類通常具有JMS規範指定的屬性和方法的超集。如果使用,在複製過程中將會被刪除。
  • 由於消息分段,分組和其他親和性,橋之間可能沒有1:1的相關性。
  • 由於高可用性等實現方式的差異,一個運輸商的物理網絡結構可能不會與其他運輸商的1:1映射。這往往將橋樑功能限制在兩個運輸工具的最簡單的共同點。
  • 通用橋樑引發的問題包括所有支持運輸數量指數的雙方橋樑問題。因此,如果雙運輸橋樑難度爲x,那麼出於規劃的目的,假設5運輸橋樑難度爲(x)**5

這並不是說「不編碼橋」,因爲這些結果非常有用。請注意,這不是一項簡單的任務。

1

恐怕至少在IBM MQ上是不可能的。 JMS只是一個API,每個提供者都可以按照他們認爲合適的方式自由實現它(正如你所說的那樣,它不是一個有線協議)。提供商罐子對於連接到JMS產品至關重要。

0

我們有概念稱爲虛擬目的地,嘗試

+0

這應該是OP的問題進行評論。不是問題的答案。一旦你賺取了50代表,你可以發表評論。 。請注意,所有帖子都由其他Stack Overlfow用戶進行同行評審。 – Raju