远程访问OpenMQ

时间:2011-05-30 01:05:03

标签: 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 = 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"

我的问题是:

  1. 如何在linux上设置openMQ 服务器,以便我可以访问openMQ 来自不同的服务器所在的地方 代码将在tomcat中运行 apache服务器(也是一个linux盒子)。

  2. 我需要做些什么改变 得到的代码 来自openMQ的QueueConnectionFactory
    坐在不同的服务器上?

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

1 个答案:

答案 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>