使用jms处理错误消息:消息驱动通道适配器

时间:2015-03-31 14:45:40

标签: spring-integration

我今天看到一个问题。我在队列中丢失的消息很少,一条消息在服务激活器中抛出错误。错误消息继续一次又一次地尝试,而没有其他消息正在从队列处理。有没有办法我可以在下面的配置中设置发送错误消息到队列消息结束。 (如果队列深度为1000,则错误消息将为1000位)

 <jms:message-driven-channel-adapter id="exch" destination="requestQueue"   channel="jmsInChannel" 
                            transaction-manager="txManager" acknowledge="auto" concurrent-consumers="3"/>
<int:service-activator input-channel="jmsInChannel" ref="messageService"/>

请咨询。

感谢Gary ..很遗憾,我们无法更改任何MQ配置。

我尝试过如下操作,并为errorRetryChannel添加服务激活器。

<int:service-activator input-channel="jmsInChannel" ref="messageService">
         <int:request-handler-advice-chain>
            <int:retry-advice max-attempts="4" recovery-channel="errorRetryChannel">
                <int:exponential-back-off initial="1000" multiplier="5.0" maximum="60000" />
            </int:retry-advice>
    </int:request-handler-advice-chain>
    </int:service-activator>

1 个答案:

答案 0 :(得分:1)

通常,您会将代理配置为转储&#34; poison&#34;经过一些尝试后,消息发送到死信队列。

如果您不能这样做,您可以将retry advice to your service activator与可以记录并以其他方式处置不良消息的恢复者一起添加。

自定义恢复程序可以在队列尾部重新排队邮件,但您可能想要删除不可恢复的邮件。