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