2016-11-14 5 views
0

У меня есть приложение, которое работает как слушатель jms, работающий в WildFly 10.1.0. Я настроил адаптер ресурсов после этого red hat reference.Как создать прослушиватель JMS для websphere MQ в WildFly 10.1.0?

Приложение развернуто без ошибок, и все выглядит нормально, но слушатель не получает сообщения из очереди. Случайно иногда некоторые сообщения считываются из очереди. Тот же код работает без проблем в tomcat.

Вот мой ресурс адаптер:

<subsystem xmlns="urn:jboss:domain:resource-adapters:4.0"> 
<resource-adapters> 
    <resource-adapter id="wmq"> 
     <archive> 
      wmq.jmsra.rar 
     </archive> 
     <transaction-support>NoTransaction</transaction-support> 
     <connection-definitions> 
      <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/jms/jmsConnectionFactory" enabled="true" use-java-context="true" pool-name="jmsConnectionFactory"> 
       <config-property name="channel"> 
        SYSTEM.DEF.SVRCONN 
       </config-property> 
       <config-property name="hostName"> 
        172.16.41.76 
       </config-property> 
       <config-property name="transportType"> 
        CLIENT 
       </config-property> 
       <config-property name="queueManager"> 
        QM.DEV.01 
       </config-property> 
       <config-property name="port"> 
        1415 
       </config-property> 
       <security> 
        <application/> 
       </security> 
      </connection-definition> 
     </connection-definitions> 
     <admin-objects> 
      <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/QUEUE.TEST.IN" pool-name="QUEUE.TEST.IN"> 
       <config-property name="baseQueueName"> 
        QUEUE.TEST.IN 
       </config-property> 
       <config-property name="baseQueueManagerName"> 
        QM.DEV.01 
       </config-property> 
      </admin-object> 
      <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/QUEUE.TEST.OUT" pool-name="QUEUE.TEST.OUT"> 
       <config-property name="baseQueueName"> 
        QUEUE.TEST.OUT 
       </config-property> 
       <config-property name="baseQueueManagerName"> 
        QM.DEV.01 
       </config-property> 
      </admin-object> 
     </admin-objects> 
    </resource-adapter> 
</resource-adapters> 

Вот как извлекается моя фабрика соединений:

@Bean(name = "jmsConnectionFactory") 
public ConnectionFactory connectionFactory() throws NamingException { 
    Context ctx = new InitialContext(); 
    ConnectionFactory jmsConnectionFactory = (ConnectionFactory) ctx.lookup("java:jboss/jms/jmsConnectionFactory"); 

    LoggerUtils.logDebug(this.getClass(), "Looking up jms connection factory reference: '{}' -> '{}'", getAppConfigJms().getConnectionFactoryName(), jmsConnectionFactory); 
    return jmsConnectionFactory; 
} 

Вот как извлекаются мои очереди:

public Queue queueLookup(String queueName) throws NamingException, JMSException { 
    Context ctx = new InitialContext(); 
    Queue queue = (Queue) ctx.lookup(queueName); 

    LoggerUtils.logDebug(this.getClass(), "Looking up jms queue: '{}' -> '{}'", queueName, queue.getQueueName()); 
    return queue; 
} 

Вот как мой слушатель создан:

public DefaultMessageListenerContainer configureListener(ConnectionFactory connectionFactory, 
    Queue destinationQueue, MessageListener messageListener) throws JMSException { 

    LoggerUtils.logDebug(this.getClass(), "Starting jms listener '{}' for queue: '{}'", messageListener, (destinationQueue != null ? destinationQueue.getQueueName() : null)); 

    DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer(); 
    listenerContainer.setConnectionFactory(connectionFactory); 
    listenerContainer.setDestinationName(destinationQueue.getQueueName()); 
    listenerContainer.setMessageListener(messageListener); 
    listenerContainer.setConcurrentConsumers(getAppConfigJms().getConcurrentConsumers().intValue()); 
    listenerContainer.setMaxConcurrentConsumers(getAppConfigJms().getMaxConcurrentConsumers().intValue()); 
    return listenerContainer; 
} 

У кого-то была такая же проблема раньше? Как я могу выполнить тест на моей фабрике подключений внутри WildFly?

ответ

0

Итак, моя проблема решена. Что-то не так в именах Queue Manager и Queue. После проверки и исправления всех имен все идет хорошо.

Вот мой фиксированный адаптер ресурсов:

<subsystem xmlns="urn:jboss:domain:resource-adapters:4.0"> 
<resource-adapters> 
    <resource-adapter id="wmq"> 
     <archive> 
      wmq.jmsra.rar 
     </archive> 
     <transaction-support>NoTransaction</transaction-support> 
     <connection-definitions> 
      <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/jms/jmsConnectionFactory" enabled="true" pool-name="jmsConnectionFactory"> 
       <config-property name="hostName"> 
        172.16.41.76 
       </config-property> 
       <config-property name="transportType"> 
        CLIENT 
       </config-property> 
       <config-property name="queueManager"> 
        QM.DEV.01 
       </config-property> 
       <config-property name="port"> 
        1415 
       </config-property> 
       <security> 
        <application/> 
       </security> 
       <validation> 
        <background-validation>false</background-validation> 
       </validation> 
      </connection-definition> 
     </connection-definitions> 
     <admin-objects> 
      <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/QUEUE.TEST.IN" enabled="true" use-java-context="false" pool-name="QUEUE.TEST.IN"> 
       <config-property name="baseQueueName"> 
        QUEUE.TEST.IN 
       </config-property> 
       <config-property name="baseQueueManagerName"> 
        QM.DEV.01 
       </config-property> 
      </admin-object> 
      <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/QUEUE.TEST.OUT" enabled="true" use-java-context="false" pool-name="QUEUE.TEST.OUT"> 
       <config-property name="baseQueueName"> 
        QUEUE.TEST.OUT 
       </config-property> 
       <config-property name="baseQueueManagerName"> 
        QM.DEV.01 
       </config-property> 
      </admin-object> 
     </admin-objects> 
    </resource-adapter> 
</resource-adapters> 
Смежные вопросы