我在本地安装了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");
上面的代码为我返回了连接工厂,从这里我也可以访问
replyQueue
和requestQueue
。这就是我设置队列的方式
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" -t q -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" -t q -o "imqDestinationName=replyQueue"
我的问题是:
如何在Linux上设置openMQ
服务器,以便我可以访问openMQ
来自其他服务器
代码将在tomcat中运行
apache服务器(也是linux系统)。
我必须做出什么改变
获得的代码
来自openMQ的
QueueConnectionFactory
坐在不同的服务器上?
我没有在GlassFish中运行openMQ,而是自己运行了openMQ(imqbrokerd.exe)。
最佳答案
在我的所有挖掘工作中,我没有发现任何迹象表明OpenMQ独立使用时会提供JNDI提供程序。看起来是由GlassFish提供的。这意味着您需要使用诸如LDAP之类的对象作为对象存储,而我还没有做过。
目前,我已经通过将.binding文件(在您的情况下位于c:\ objectstore中)复制到JMeter可以看到的文件系统中,从而“可以欺骗我”,以便我可以引用它。只要您使用实际的计算机名或IP代替本地主机即可,但是显然不会削减它的产量。
在Java方面,您可以完全删除JNDI并直接实例化com.sun.messaging.ConnectionFactory
。我用Spring注入了连接工厂。请注意,因为com.sun.messaging.ConnectionFactory不是bean,所以我必须包括自己的非常简单的OpenMQConnectionFactoryFactory(从https://wikis.oracle.com/display/GlassFish/OpenMQSpringConnectionConsumer窃取)。
<bean id="connectionfactoryfactory"
class="myownlibrary.messaging.factory.OpenMQConnectionFactoryFactory">
<property name="properties">
<props>
<prop key="imqAddressList">qa29-vm:7676</prop>
<prop key="imqAddressList">qa30-vm:7676</prop>
<prop key="imqReconnectAttempts">-1</prop>
</props>
</property>
</bean>
<bean id="connectionfactory"
factory-bean="connectionfactoryfactory"
factory-method="constructConnectionFactory"/>
<bean id="jmsFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="connectionfactory" />
</bean>
关于java - 远程访问OpenMQ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6171457/