我正在开发一个使用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消息。 有什么想法吗?
答案 0 :(得分:2)
我可以建议JMS队列,可能主题是类似或相同的解决方案。您可以在两台服务器上创建具有相同名称的队列,并让第一个队列使用glassfish配置将其消息推送到第二个队列,因此让imq代理完成工作。使用属性" AddressList"在第一台服务器上配置jms连接工厂。有价值" mq:// host2:port2"使用第二个经纪人的设置。
请参阅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