我在本地安装了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" -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/

10-10 03:05