我使用RabbitMQ和彈簧集成來處理傳入的JSON消息。Spring集成和AMQP:如何正常處理反序列化異常?
配置的相關部分看起來是這樣的:
<amqp:inbound-channel-adapter channel="incomingChannel" queue-names="..."
message-converter="jsonConverter" error-handler="errorHandler"
error-channel="errorChannel" />
我使用數據綁定傑克遜作爲JSON轉換器。
有時傳入的JSON消息有錯誤的語法。這導致下面的(正確的)異常:
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener threw exception
Caused by: org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token...
異常然後由errorHandler
它簡單地是一個MessagePublishingErrorHandler
到errorChannel
處理。
到目前爲止這麼好。問題是,該消息仍然被AMQP客戶端拒絕,儘管我正在使用錯誤處理程序處理它。然後RabbitMQ一遍又一遍地重新傳送消息。即使配置死信隊列也沒有幫助。任何想法如何正確處理這種情況?
處理進一步下去(成功反序列化後)的異常處理得很好:AMQP消息已確認並且錯誤消息發送到errorChannel
。
任何想法?
庫版本:
- Spring集成:3.0.1
- Spring框架:4.0.2
- 傑克遜數據綁定:2.3.1
太好了,謝謝你的回答! –
我的錯誤,'requeue-rejected'設置在使用' '時確實可用。我忘了我們前一段時間添加了它。 –