簡體   English   中英

如何使用Glassfish的JMS Broker將消息“代理”到Internet上的JMS代理?

[英]How can I use Glassfish's JMS Broker to “proxy” a message on to a JMS Broker on the internet?

我正在研究在我的本地 Glassfish3安裝上運行的Java EE 6企業應用程序。 我的一個EJB需要將消息發送到位於Internet上某處的遠程 JMS代理。

不幸的是,互聯網連接相當不可靠,所以我的想法是首先將消息發送給當地的 Glassfish自己的JMS代理。 然后,我的本地代理將消息轉發給遠程代理。 如果互聯網連接不可用, 本地經紀人將等到連接恢復。

我認為這會有用嗎? 如果是這樣,我會非常感謝一些想法如何開始。

這種方法對於這種情況非常有效(當遠程端點不總是可用時)並且被稱為“存儲轉發”消息傳遞。 實際上,許多應用程序服務器都支持開箱即用,例如WebLogic及其存儲轉發服務:

SAF服務使WebLogic Server能夠在跨WebLogic Server實例分布的應用程序之間可靠地傳遞消息。 例如,使用SAF服務,在本地WebLogic Server實例上運行或連接的應用程序可以可靠地將消息發送到駐留在遠程服務器上的端點。 如果在發送消息時目標不可用(由於網絡問題或系統故障),則消息將保存在本地服務器實例上,並在消息可用后轉發到遠程端點。

Open MQ (GlassFish的JMS實現)的情況下,我知道存儲和轉發消息是在功能計划上(參見2007年的演示文稿 )。 但是我在這方面找到一個確切的狀態有一些困難(像這樣的消息並沒有真正澄清情況)。 可以肯定的是,GlassFish v3使用Open MQ 4.4, Open MQ 4.4具有JMS橋(存儲和轉發所需),您可以將它用於代理與代理通信。 請參閱最近的博客文章 ,了解如何配置它(找不到Open MQ 4.4的文檔!!)。 就個人而言,我會在開發郵件列表上發布消息。

現在,如果這不是很清楚,或者你沒有得到令人滿意的答案,那么總是可以編寫一個自定義應用程序來使用消息並將它們轉發給不同的代理,這並不復雜。 基本上,存儲和轉發消息傳遞意味着為應用程序使用“本地”持久隊列,並使用MDB來使用消息並將它們發送到遠程JMS目標(在單個事務中)。 這需要進行一些進一步的測試,但作為JMS客戶端,處理轉發的MDB應該能夠透明地重新連接到遠程目標。

客戶 (生產者或消費者)不可靠時,JMS非常適合,但如果經紀人本身不可靠,則您遇到麻煩。

您可以嘗試使用“登台”代理的重新傳遞參數(超時,重試次數等)。 但是,您仍然需要一個充當forwarer的虛擬MDB:說明代理嘗試傳遞到嘗試連接外部代理的虛擬MDB。 如果它不能導致事務失敗並且消息仍在暫存代理中。 然后,說明代理將嘗試將消息重新傳遞給虛擬MDB。

然后,“暫存”代理的重新傳遞功能可以幫助管理連接問題,以防MDB無法將消息轉發給“外部”代理。 但要注意,在某個時間點,消息可能會進入“分段”代理的死消息隊列(DMQ),甚至可能會被丟棄,具體取決於它的配置方式。

但這對我來說仍然有點奇怪......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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