Java 远程访问OpenMQ
我在本地安装了openMQ,它运行良好。我使用以下代码通过JNDI查找获得Java 远程访问OpenMQ,java,openmq,Java,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
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"
我的问题是:
QueueConnectionFactory
来自openMQ坐在不同的服务器上
我不是在GlassFish中运行openMQ,而是自己运行openMQ(imqbrokerd.exe) 在我所有的挖掘中,我没有发现任何东西表明OpenMQ在单独使用时提供JNDI提供程序。看起来是玻璃鱼提供的。这意味着您需要使用LDAP之类的东西作为对象存储,我还没有这样做 目前,我已经通过将.binding文件(在您的案例中是在c:\objectstore中的文件)复制到JMeter可以看到的文件系统上进行了“欺骗”,以便我可以引用它。只要您使用实际的机器名,或者IP,而不是本地主机,这将起作用,但显然不会将其用于生产 在Java方面,您可以完全删除JNDI,直接实例化
com.sun.messaging.ConnectionFactory
。我用弹簧将连接件注入工厂。请注意,我必须包含我自己的一个非常简单的OpenMQConnectionFactoryFactory(从中窃取),因为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>
qa29-vm:7676
qa30虚拟机:7676
-1
当您直接连接
com.sun.messaging.ConnectionFactory时
如何指定URL?令人惊讶的是,尽管我们没有使用OpenMQ,但我仍然有我的.binding文件。尝试这样的操作:mq\://qa29 vm \:7676/jms,mq\://qa30 vm \:7676/jms
,它引用了我设置为集群的两台机器。