【问题标题】:JMS message not picked up by Spring listenerSpring 侦听器未接收到 JMS 消息
【发布时间】:2015-06-18 05:21:25
【问题描述】:

我有一个 Spring 应用程序在独立的 JBoss EAP 6.2(带有嵌入式 HornetQ 提供程序)中运行。

消息已成功放入队列(我可以在 jboss-eap-6.2\standalone\data\messagingjournal\hornetq-data-1.hq 中看到它们,因为队列是持久的),但没有被监听器拾取(侦听器内的断点未命中)。我怀疑配置中缺少某些内容或错误,但看不到什么。 JBoss 启动时没有任何验证错误。

首先,摘自 Spring 的 applicationContext.xml:

连接工厂和队列的 JNDI 名称与 JBoss 的standalone-full.xml 中的名称匹配

<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:/JmsXA" resource-ref="false" proxy-interface="javax.jms.ConnectionFactory"/> 

<jee:jndi-lookup id="myQueue" jndi-name="java:jboss/exported/jms/queue/myQueue"/> 

<bean id="myHandler" class="com.example.MyHandler" />

<jms:listener-container destination-type="queue" acknowledge="auto" connection-factory="jmsConnectionFactory">
    <jms:listener destination="java:jboss/exported/jms/queue/myQueue" ref="myHandler" method="processMessage" />
</jms:listener-container>

消息处理程序被声明为 Spring 组件,并且类和方法名称与上面声明的匹配:

@Component
public class MyHandler {

public void processMessage(MyMessage delaySendTransfer) {
    //...
}

【问题讨论】:

    标签: java spring jboss jms hornetq


    【解决方案1】:

    默认情况下,Spring 使用DynamicDestinationResolver 作为侦听器容器,因此它希望在侦听器的目标属性中接收 bean 引用。由于您使用的是JNDI 名称,因此您应该将目标解析器策略设置为jndiDestinationResolver

    <jms:listener-container destination-resolver="jndiDestinationResolver" destination-type="queue" acknowledge="auto" connection-factory="jmsConnectionFactory">
        <jms:listener destination="java:jboss/exported/jms/queue/myQueue" ref="myHandler" method="processMessage" />
    </jms:listener-container>
    

    用 bean 引用替换目标属性值也应该可以解决问题:

    <jms:listener-container destination-type="queue" acknowledge="auto" connection-factory="jmsConnectionFactory">
        <jms:listener destination="myQueue" ref="myHandler" method="processMessage" />
    </jms:listener-container>
    

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 1970-01-01
      • 2015-02-03
      • 2016-11-30
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      相关资源
      最近更新 更多