当前位置: 首页 > 知识库问答 >
问题:

Spring侦听器未拾取JMS消息

慕容超
2023-03-14

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

消息被成功地放在队列中(我可以在jboss eap-6.2\独立\data\MessagingJournal\hornetq-data-1.hq中看到它们,因为队列是持久的),但不会被侦听器拾取(侦听器中的断点不会被命中)。我怀疑配置中缺少或错误的东西,但看不出是什么。JBoss启动时没有任何验证错误。

首先,Spring的应用摘录ontext.xml:

连接工厂和队列的JNDI名称与JBossstandalone-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) {
    //...
}

共有1个答案

阎令
2023-03-14

默认情况下,Spring对侦听器容器使用DynamicDestinationResolver,因此它希望在侦听器的destination属性中接收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>
 类似资料:
  • 现在当我启动基于spring的应用程序时。我在调试器中看到,我的侦听器方法注册了,但是Spring不连接到ActiveMQ队列,我可以通过查看ActiveMQ web控制台轻松地看到这一点。此外,我没有看到任何来自spring的日志输出,而JMS的东西是这样做的。 我错过什么了吗?从这里走下去最好的路是什么?当然,我也测试了从ActiveMQ的web控制台中发送消息,但是如果没有客户端连接,就没有

  • 我使用JMS从IBM MQ message Broker发送接收消息。我目前正在处理侦听器服务,抛出未处理的异常和消息发送回队列而没有确认。我希望服务重试一个可配置的次数,并抛出表示监听器服务不可用的完全异常消息。 我的监听器和容器工厂如下所示。

  • 该应用程序使用Spring JMS Listener连接到JMS队列,并在WAS 8.5中部署。x、 使用spring应用程序上下文xml,bean用初始化,目标为。 在class方法中,代码试图使用查找JNDI引用,代码片段如下, 应用程序在处理消息时抛出以下异常。 例外:javax。命名。ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时

  • 1天前 嗨,当试图根据http://wso2.org/project/esb/java/4.0.3/docs/samples/transport_samples.html/sample250使用wso2 esb侦听来自JMS队列的消息时,我遇到了一个异常,如下所示 XML解析错误:格式不正确的位置: org.apache.axis2.axisfault:系统无法从jms://jmslistener

  • 我正在使用Spring靴和活动MQ设置一个持久的JMS主题使用者。我能够使用Spring靴@JmsListener注释来使一切正常工作(作为耐用消费者成功运行)。但是,因为我想动态创建侦听器,所以我尝试使用 JmsListener 配置接口来创建它们。 使用主题“消费者”下面的代码可以成功地创建和使用消息。但是,问题是它创造的消费者并不持久。我在工厂中将clientId、setSubscripti

  • 问题内容: 当我使用Spring收听JMS消息时,我收到了以上错误。 我想知道如何将错误处理程序添加到JMS侦听器中? 问题答案: 上有一个物业: bean 在哪里实现: 但是请注意,根据文档: 该消息侦听器的默认行为将 在错误级别记录任何此类异常 。[…]但是,如果必须进行错误处理,则可以将错误处理程序策略的任何实现提供给setErrorHandler(ErrorHandler)方法。 检查您的