[英]JMS-Receiving messages from remote Glassfish
我正在開發一個使用JMS作為消息傳遞層的應用程序。 我還使用glassfish來托管jms / mq后端。 該應用程序能夠使用我最初設置的glassfish 3.1服務器中的連接工廠和主題來執行發布/訂閱消息傳遞。 現在,我有另一個glassfish(4.1)實例,該實例承載一組新的應用程序套件使用的新功能,但是我仍然需要使用第一個glassfish服務器廣播的消息。 客戶端使用特定於glassfish 4.1的新庫這一事實,我無法直接連接到glassfish1服務器。
我遵循了有關多服務器環境的本教程( https://docs.oracle.com/cd/E19798-01/821-1841/bncfp/index.html ),並且獨立的Java客戶端都使用連接工廠設置在新的glassfish服務器中連接到舊的glassfish服務器。 我知道正在建立連接,因為如果我停止glassfish1,則會出現連接丟失錯誤等。
相關的客戶端代碼如下:
System.setProperty("org.omg.CORBA.ORBInitialHost", "10.20.10.52");
System.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
try {
try {
ctx = new InitialContext();
} catch (NamingException ex) {
ex.printStackTrace();
}
ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/ConnectionFactory");
Connection connection = cf.createConnection();
jmsContext = cf.createContext(Session.AUTO_ACKNOWLEDGE);
topic = (Topic) ctx.lookup("jms/Topic");
updateShipperConsumer = jmsContext.createConsumer(topic);
jmsProducer = jmsContext.createProducer();
logger.info("Started JMS successfully!");
} catch (NamingException ex) {
ex.printStackTrace();
} catch (JMSException ex) {
Logger.getLogger(LamtecJMSSystemImpl.class.getName()).log(Level.SEVERE, null, ex);
}
}
jms / ConnectionFactory jndi是glassfish2上的本地連接工廠,其AddressList屬性設置為glassfish1:7676。 如本教程所建議,在glassfish1上有一個具有相同名稱的對應連接工廠。 查看glassfish1服務器上的imq日志文件,我發現從glassfish2建立了連接。
我不確定是否應該在主題jndi(在本地以及在遠程服務器上)上進行查找,但是我認為這沒有什么不同。
根據我上面引用的教程,我已經完成了所有需要的配置和代碼方面的工作,但是我的客戶端仍然沒有收到任何jms消息。 有任何想法嗎?
我可以為JMS隊列提供建議,可能是針對主題相似或相同的解決方案。 您可以在兩台服務器上創建具有相同名稱的隊列,並使用glassfish配置讓第一個隊列將其消息推送到第二個隊列,因此讓imq代理完成這項工作。 在第二台代理的設置中,使用值為“ mq:// host2:port2”的屬性“ AddressList”配置第一台服務器上的jms連接工廠。
請參閱OSCM服務目錄https://github.com/servicecatalog/development/blob/master/oscm-installation/domains/bes_domain/installer/resources-template.xml中有關這種配置的glassfish資源模板。
該示例是連接工廠“ jms / bss / masterIndexerQueueFactory”,您可以在此模板中找到它。
有關開源項目OSCM雲服務管理軟件的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.