远程访问OpenMQ

我在本地安装了openMQ,它工作正常。 我使用以下代码来使用JNDI查找来获取QueueConnectionFactory

 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory"); env.put(Context.PROVIDER_URL, "file:///C:/objectstore"); Context ctx = new InitialContext(env); QueueConnectionFactory myFactory = (QueueConnectionFactory) ctx.lookup("MyQueueConnection"); 

以上返回我连接工厂,我也访问了replyQueuerequestQueue

这是我设置队列的方式

 imqobjmgr add -l "MyQueueConnection"" -j "java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContext Factory" -j "java.naming.provider.url=file:///C://objectstore" -t qf -o "imqAddressList=mq://localhost:7676/jms" imqobjmgr add -l "cn=DEVL.REQUEST" -j "java.naming.factory.initial=com.sun.jndi.fscontext.RefFSCon textFactory" -j "java.naming.provider.url=file:///C://objectstore" -tq -o "imqDestinationName=requestQueue" imqobjmgr add -l "cn=DEVL.REPLY" -j "java.naming.factory.initial=com.sun.jndi.fscontext.RefFSConte xtFactory" -j "java.naming.provider.url=file:///C://objectstore" -tq -o "imqDestinationName=replyQueue" 

我的问题是:

  1. 如何在linux服务器上设置openMQ,以便我可以从不同的服务器访问openMQ,其中代码将在tomcat apache服务器(也是linux盒子)中运行。

  2. 我需要对代码进行哪些更改才能获得
    来自openMQ的QueueConnectionFactory
    坐在不同的服务器上?

我没有在GlassFish中运行openMQ,我正在运行openMQ(imqbrokerd.exe)。

在我的所有挖掘中,我没有发现任何迹象表明OpenMQ在单独使用时提供了JNDI提供程序。 它看起来像是由GlassFish提供的。 这意味着您需要使用LDAP之类的东西作为对象存储,我还没有这样做。

目前我通过将.binding文件(在你的情况下是c:\ objectstore中的文件)复制到JMeter可以看到的文件系统来“欺骗”,所以我可以引用它。 只要您使用实际的机器名称或IP,而不是本地主机,它将工作但显然不会削减生产。

在Java端,您可以完全删除JNDI并直接实例化com.sun.messaging.ConnectionFactory 。 我用Spring注入了连接工厂。 请注意,我必须包含我自己的一个非常简单的OpenMQConnectionFactoryFactory(从https://wikis.oracle.com/display/GlassFish/OpenMQSpringConnectionConsumer中窃取),因为com.sun.messaging.ConnectionFactory不是bean。

    qa29-vm:7676 qa30-vm:7676 -1