2011-08-09 58 views
3

我正在處理一個基於消息的服務,它將所有傳入的請求排隊並稍後處理它們。處理錯誤的最佳做法是什麼?例如,將信息發送到下一個系統時出現格式錯誤的消息或通信錯誤。使用Spring JMS進行錯誤處理的最佳做法

通過使用事務處理可以處理後者,但是當消息格式錯誤時,沒有必要重試或保留它。是否有任何想法爲不同的場景實現不同的錯誤處理,如果是,應該如何處理?

謝謝!

回答

9

我認爲你是在正確的軌道上。這裏有三個基本模式:

  • 的信息是有效的,可以被加工

正常處理應用。

  • 的信息是有效的,但不能馬上

或許有些資源需要處理的信息是不可用的處理。在這種情況下,將交易設置爲rollbackOnly並且消息將被重新發送。希望你的JMS實現支持延遲重新傳遞的概念,這樣你就不會再處理同樣的消息數千次,直到你的MIA資源再次可用。如果沒有(是的,我在看着你,WebSphere MQ),我通常所做的就是將消息推送到另一個保留用於臨時無法處理的消息和提交的JMS隊列。當MIA資源重新聯機時,我將程序性地讀取該隊列中的所有消息,並將它們寫回到主要[原始]隊列中,並在那裏處理完成。

  • 該消息是無效

抑制異常並提交事務。你永遠不會再看到這個消息。爲了保持無效消息的審覈線索:

  • 寫無效消息開了個壞隊列在那裏可以稍後檢查。
  • 註銷消息
  • 保持的內容無效的消息的JMX計數器(由類型,源隊列細分,解析錯誤等)

主要點,不過,是確保你承諾交易,如果你知道你會從來沒有能夠處理該消息。

+0

謝謝你的一個非常有用的答案!這聽起來很不錯。你有沒有使用Spring實現這一點的經驗?現在,我在DefaultMessageListenerContainer上進行了大量的中繼,這使得在每個事件中執行建議的操作都變得稍微困難​​。但我不想走低。有任何想法嗎? – Kristoffer

相關問題