JMS-从远程Glassfish接收消息
JMS-Receiving messages from remote Glassfish
我正在开发一个使用 JMS 作为消息传递层的应用程序。我还使用 glassfish 来托管 jms/mq 后端。该应用程序能够使用我最初设置的 glassfish 3.1 服务器中的连接工厂和主题来执行 pub/sub 消息传递。我现在有另一个 glassfish (4.1) 实例,它承载一组新应用程序使用的一组新功能,但我仍然需要使用第一个 glassfish 服务器广播的消息。事实上,客户端使用特定于 glassfish 4.1 的新库,我无法直接连接到 glassfish1 服务器。
我已经按照本教程学习了多服务器环境 (https://docs.oracle.com/cd/E19798-01/821-1841/bncfp/index.html) 和独立 java 客户端都使用新 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 上的本地连接工厂,其地址列表 属性 设置为 glassfish1:7676。按照教程的建议,在 glassfish1 上有一个相应的同名连接工厂。查看 glassfish1 服务器上的 imq 日志文件,我看到已建立来自 glassfish2 的连接。
我不确定我是否应该查找主题 jndi(我在本地和远程服务器上都有),但我认为这没有什么不同。
根据我上面引用的教程,我已经完成了所有需要的配置和代码方面的工作,但我的客户端仍然没有收到任何 jms 消息。
有什么想法吗?
我可以就 JMS 队列提出建议,主题可能是相似或相同的解决方案。您可以在两台服务器上创建具有相同名称的队列,并使用 glassfish 配置让第一个队列将其消息推送到第二个队列,让 imq 代理完成这项工作。在第一台服务器上配置 jms 连接工厂 属性 "AddressList",值为 "mq://host2:port2",第二个代理的设置。
请参阅 OSCM 服务目录中此类配置的 glassfish 资源模板
https://github.com/servicecatalog/development/blob/master/oscm-installation/domains/bes_domain/installer/resources-template.xml
示例是您可以在此模板中找到的连接工厂 "jms/bss/masterIndexerQueueFactory"。
关于开源项目的更多信息OSCM Cloud Service Management Software
我正在开发一个使用 JMS 作为消息传递层的应用程序。我还使用 glassfish 来托管 jms/mq 后端。该应用程序能够使用我最初设置的 glassfish 3.1 服务器中的连接工厂和主题来执行 pub/sub 消息传递。我现在有另一个 glassfish (4.1) 实例,它承载一组新应用程序使用的一组新功能,但我仍然需要使用第一个 glassfish 服务器广播的消息。事实上,客户端使用特定于 glassfish 4.1 的新库,我无法直接连接到 glassfish1 服务器。
我已经按照本教程学习了多服务器环境 (https://docs.oracle.com/cd/E19798-01/821-1841/bncfp/index.html) 和独立 java 客户端都使用新 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 上的本地连接工厂,其地址列表 属性 设置为 glassfish1:7676。按照教程的建议,在 glassfish1 上有一个相应的同名连接工厂。查看 glassfish1 服务器上的 imq 日志文件,我看到已建立来自 glassfish2 的连接。
我不确定我是否应该查找主题 jndi(我在本地和远程服务器上都有),但我认为这没有什么不同。
根据我上面引用的教程,我已经完成了所有需要的配置和代码方面的工作,但我的客户端仍然没有收到任何 jms 消息。 有什么想法吗?
我可以就 JMS 队列提出建议,主题可能是相似或相同的解决方案。您可以在两台服务器上创建具有相同名称的队列,并使用 glassfish 配置让第一个队列将其消息推送到第二个队列,让 imq 代理完成这项工作。在第一台服务器上配置 jms 连接工厂 属性 "AddressList",值为 "mq://host2:port2",第二个代理的设置。
请参阅 OSCM 服务目录中此类配置的 glassfish 资源模板 https://github.com/servicecatalog/development/blob/master/oscm-installation/domains/bes_domain/installer/resources-template.xml
示例是您可以在此模板中找到的连接工厂 "jms/bss/masterIndexerQueueFactory"。
关于开源项目的更多信息OSCM Cloud Service Management Software