java – jms错误处理程序:仅在jms放弃时才接收回调

我正在使用带有活动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>

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

另一种方法可能是使用try-catch包装您的侦听器,并仅在message.getIntProperty(“JMSXDeliveryCount”)

点赞