【问题标题】:Accessing OpenMQ remotely远程访问 OpenMQ
【发布时间】:2011-09-04 12:20:39
【问题描述】:

我在本地安装了 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的代码
    坐在不同的服务器上?

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

【问题讨论】:

    标签: java openmq


    【解决方案1】:

    在我的所有挖掘中,我没有发现任何表明 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>
    

    【讨论】:

    • 当你直接与com.sun.messaging.ConnectionFactory连接时,你如何指定URL?
    • 令人惊讶的是,尽管我们没有使用 OpenMQ,但我仍然有我的 .binding 文件。尝试这样的事情:mq\://qa29-vm\:7676/jms,mq\://qa30-vm\:7676/jms 这引用了我设置为集群的两台机器。
    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 2013-08-09
    • 2012-11-23
    • 2018-07-23
    • 2021-12-12
    • 2011-08-13
    • 2019-04-04
    • 2017-10-02
    相关资源
    最近更新 更多