我有一个应用程序可以作为在WildFly 10.1.0中运行的jms监听器。我已在此red hat reference之后配置了资源适配器。
部署应用程序时没有错误,一切看起来都很好,但是侦听器不会从队列中获取任何消息。随机地有时会从队列中读取一些消息。在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 :(得分:0)
所以,我的问题解决了。队列管理器和队列名称有问题。检查并修复所有名称后,一切进展顺利。
这是我的固定资源适配器:
<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>