Удаленный доступ к OpenMQ - PullRequest
2 голосов
/ 30 мая 2011

Я установил 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 и 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. Как настроить openMQ на сервере linux, чтобы я мог получить доступ к openMQ с другого сервера, где код будет работать на сервере Apache Tomcat (такжекоробка linux).

  2. Какие изменения я должен внести в код, чтобы получить
    QueueConnectionFactory от openMQ
    , установленного на другом сервере?

Я не запускаю openMQ в GlassFish, я запускаю openMQ самостоятельно (imqbrokerd.exe).

1 Ответ

2 голосов
/ 29 ноября 2011

Во всех своих копаниях я не нашел ничего, что указывало бы на то, что 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 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>

...