2016-02-26 118 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