4

我正在使用带有活动 mq 的 spring-jms。

ErrorHandler设置了一个侦听器,每次 jms 消息传递失败时都会接收回调 - 即处理消息的方法抛出异常而不是正常返回。

但是,我的 jms 配置为重试几次,直到 jms 交付最终成功。我的回调会收到所有失败的通知。

我想要的是一个仅在所有重试最终失败时才收到通知的侦听器。动机是提出问题以引起管理员的注意。但我不希望管理员控制台中出现虚假通知。

<bean abstract="true" id="abstractDestinationListener"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsFactory" />
    <property name="errorHandler" ref="destinationErrorHandler"/>
    <property name="sessionTransacted" value="true"/>
</bean>
4

2 回答 2

2

您可能会考虑为相关目的地使用每个目的地的死信队列(individualDeadLetterStrategy- https://activemq.apache.org/message-redelivery-and-dlq-handling.html)。当达到最大重新传递计数时,消息被移出到 DLQ。然后,您可以使用向管理员发送电子邮件的侦听器在该队列上设置使用者。

另一种方法可能是使用 try-catch 包装您的侦听器,并仅在 时重新抛出任何异常message.getIntProperty("JMSXDeliveryCount") < MAX_REDELIVERY_COUNT,否则向管理员发送电子邮件。但是,该选项意味着将您的重新投递限制放在两个地方 - 代理配置和代码。

于 2013-03-04T14:41:09.467 回答
0

如果您需要更细粒度的控制/灵活性/路由与 JMS 消息/处理,那么您应该只使用 Apache Camel 的错误处理......

于 2013-03-04T22:56:01.633 回答