Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 远程访问OpenMQ_Java_Openmq - Fatal编程技术网

Java 远程访问OpenMQ

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

我在本地安装了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");
上面返回了连接工厂,我也从那里访问
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"
我的问题是:

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

  • 我需要对其进行哪些更改 获取
    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
    ,它引用了我设置为集群的两台机器。