2015-03-31 137 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

相關問題