2016-02-26 112 views
1

我正在開發一個應用程序,它使用JMS作爲消息傳遞層。我還使用glassfish來託管jms/mq後端。該應用程序能夠使用我最初設置的glassfish 3.1服務器中的連接工廠和主題來進行發佈/訂閱消息。我現在有另一個glassfish實例(4.1),它承載了一套新的應用程序使用的一組新功能,但我仍然需要使用第一個glassfish服務器廣播的消息。客戶使用特定於glassfish 4.1的新庫的事實,我無法直接連接到glassfish1服務器。JMS-從遠程Glassfish接收消息

我按照本教程中關於多服務器環境(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 /連接工廠JNDI是本地連接工廠在glassfish2上將AddressList屬性設置爲glassfish1:7676。在glassfish1上有一個相應的連接工廠,具有相同的名稱,正如本教程所建議的。查看glassfish1服務器上的imq日誌文件,我看到來自glassfish2的連接已經建立。
我不確定我應該對主題jndi(我本地以及遠程服務器上)進行查找,但我認爲這沒有什麼不同。

根據我上面引用的教程,我已經完成了所有需要配置和代碼明智的工作,但我仍然沒有在客戶端獲得任何jms消息。 任何想法?

回答

2

我可以建議JMS隊列,可能對於主題是類似或相同的解決方案。您可以在兩臺服務器上創建具有相同名稱的隊列,並讓第一個隊列使用glassfish配置將其消息推送到第二個隊列,因此請讓imq代理完成這項工作。使用值爲「mq:// host2:port2」的屬性「AddressList」在第一臺服務器上使用第二個代理的設置配置jms連接工廠。

都使用GlassFish資源模板在OSCM服務目錄 https://github.com/servicecatalog/development/blob/master/oscm-installation/domains/bes_domain/installer/resources-template.xml

這種配置的例子是連接工廠「JMS/BSS/masterIndexerQueueFactory」你可以在這個模板找到。

更多關於開放源代碼項目OSCM Cloud Service Management Software