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

replyQueue上記は、 andにもアクセスする接続ファクトリを返します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. Tomcat Apache サーバー (Linux ボックス) でコードが実行される別のサーバーから openMQ にアクセスできるように、Linux サーバーで openMQ をセットアップするにはどうすればよいですか。

  2. 別のサーバーにある
    QueueConnectionFactoryopenMQから取得するには、コードにどのような変更を加える必要がありますか?

私は GlassFish で openMQ を実行していません。それ自体 (imqbrokerd.exe) で openMQ を実行しています。

4

1 に答える 1

2

調べてみても、OpenMQ がスタンドアロンで使用されている場合に JNDI プロバイダーを提供していることを示すものは何も見つかりませんでした。それはGlassFishによって提供されているようです。これは、オブジェクト ストアとして LDAP のようなものを使用する必要があることを意味しますが、これはまだ行っていません。

現在、.binding ファイル (この場合は c:\objectstore にあるファイル) を、JMeter が参照できるファイル システムにコピーすることで「ごまかしました」。localhost の代わりに実際のマシン名または 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>

于 2011-11-29T17:34:11.237 に答える