2

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

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");

上面返回了连接工厂,我也可以从中访问replyQueueand 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"

我的问题是:

  1. 如何在 linux 服务器上设置 openMQ,以便我可以从另一个服务器访问 openMQ,其中代码将在 tomcat apache 服务器(也是一个 linux 机器)中运行。

  2. 我必须对代码进行哪些更改才能从 位于不同服务器上的
    QueueConnectionFactoryopenMQ获取?

我没有在 GlassFish 中运行 openMQ,而是自己运行 openMQ (imqbrokerd.exe)。

4

1 回答 1

2

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

目前,我通过将 .binding 文件(在您的情况下位于 c:\objectstore 中的文件)复制到 JMeter 可以看到的文件系统中来“欺骗”,以便我可以引用它。只要您使用实际的机器名称或 IP,而不是 localhost 就可以了,但显然不会将其用于生产。

在 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>

于 2011-11-29T17:34:11.237 回答