我在本地安装了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)。
答案 0 :(得分:2)
在我的所有挖掘过程中,我没有发现任何迹象表明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。
<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>