2014-07-01 34 views
0

我需要在Glassfish服務器和Delphi之間進行通信。我需要從中收到消息。正如我發現Glassfish使用OpenMQ經紀人。在Delphi中接收OpenMQ消息

首先,我找到了delphi的jms庫。我發現那裏只有JMS接口。並發現了SonicMQ JMS的實現。但是,正如我發現的,SonicMQ和OpenMQ-- JMS的不同代理商。也許我錯了。

另外我還發現了Habari Client Library for OpenMQ,但是這個庫不是免費的。

也許有人知道這個問題的任何免費解決方案?或者我錯了,我可以使用SonicMQ實現?

我已經下載了Habari演示程序,但無法連接到glassfish服務器(連接已關閉)。也許我做錯了什麼?我只需要得到消息。我不需要發送它們。

我從來沒有使用JMS之前,這就是爲什麼我有這樣的問題。

+0

「優雅的連接」是一個非常自然的信息。你需要明白它的意思。 –

+0

您可以與我聯繫(我是Habari客戶端庫的作者)以獲得支持。 Habari客戶端連接要求OpenMQ具有活動的STOMP偵聽器。您可以在Habari文檔中找到在OpenMQ中啓用STOMP的步驟。 – mjn

+0

p.s.所有的JMS經紀人都使用他們自己的專有線路格式,而STOMP,AMQP和MQTT就是適用於許多信息經紀人的標準化線路格式的例子。 (JMS是一個API,不是協議) – mjn

回答

3

正如您在評論中所寫的那樣,運行GlassFish服務器的組織不允許使用獨立於平臺的STOMP協議來訪問服務器。

這意味着與消息代理交換消息的唯一方法是使用OpenMQ的專有Java客戶端(GlassFish中的默認JMS提供程序)。

因此,您需要一個Java/Delphi橋接器,它使用Java客戶端接收消息,然後將它們傳遞給Delphi端。與Delphi端的通信可以通過TCP/IP完成,這將允許同步和異步接收消息:或者使用請求/響應通信風格(「同步」通信,拉動下一個消息由Delphi端啓動)或者Delphi端的偵聽器線程,這些消息將被「異步地」從Java端推送到該端口。


通信的不同路徑可能在C API上。這需要在Delphi中導入C客戶端庫。程序員指導的c-api可在MQ document collection中找到。

+0

我想現在我沒有發現問題。如果STOMP協議啓用,我可以直接從delphi使用一些stomp客戶端庫,例如https://code.google.com/p/delphistompclient/source/checkout獲取消息嗎? –

+0

@YuryKerbitskov OpenMQ在STOMP實現方面有細微差別 - 因此開源客戶端可能會或可能無法工作。但是,需要在OpenMQ端啓用STOMP。此外,防火牆必須爲STOMP端口打開(OpenMQ默認爲7672) – mjn

+0

非常感謝!你已經回答了我的問題。 –