如何在WildFly 10.1.0中为websphere MQ创建JMS侦听器?

问题描述:

我有一个在WildFly 10.1.0中运行的jms监听器。我已在此red hat reference之后配置了资源适配器。如何在WildFly 10.1.0中为websphere MQ创建JMS侦听器?

应用程序部署时没有错误,一切看起来都没事,但侦听器没有从队列中获取任何消息。随机地有时会从队列中获取一些消息。在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内的连接工厂进行测试?

所以,我的问题解决了。队列管理器和队列名称中出现错误。在检查并修复所有名称之后,现在一切进展顺利。

这是我的固定资源适配器:

<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>