2015-03-31 70 views
1

我今天看到一个问题。我有几个消息放入队列中,一条消息在服务激活器中抛出错误。错误消息不断尝试,而没有其他消息正在从队列中处理。有什么办法可以在下面的配置中设置发送错误消息到队列消息结束。 (如果队列深度为1000,错误信息将在1000位置)使用jms处理错误的消息:消息驱动通道适配器

<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

通常,您可以配置代理以在经过一定次数的尝试后将“毒性”消息转储到死信队列。

如果您不能这样做,您可以添加一个retry advice to your service activator以及一个可以记录并以其他方式处置该错误消息的恢复器。

自定义恢复器可以在队列的尾部重新发送消息,但您可能想要丢弃不可恢复的消息。

+0

只是想在文档中更新你有一个int:retry-advice id =“retrier”字段,但集成不允许这样做。没有这个我能够运行没有错误的应用程序。 – 2015-04-01 11:24:09

相关问题