私は、RabbitMQとSpring Integrationを使用して、着信 JSON メッセージを処理しています。
構成の関連部分は次のようになります。
<amqp:inbound-channel-adapter channel="incomingChannel" queue-names="..."
message-converter="jsonConverter" error-handler="errorHandler"
error-channel="errorChannel" />
JSON コンバーターとして Jackson Databind を使用しています。
受信 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
toである によって処理されerrorChannel
ます。
ここまでは順調ですね。問題は、メッセージをエラー ハンドラで処理しているにもかかわらず、メッセージがまだ AMQP クライアントによって拒否されていることです。その後、RabbitMQ はメッセージを何度も再配信します。配信不能キューを構成しても役に立ちませんでした。このシナリオを正しく処理する方法はありますか?
(逆シリアル化が成功した後の) 処理のさらに下にある例外は問題なく処理されます。AMQP メッセージが確認され、エラー メッセージが に送信されerrorChannel
ます。
何か案は?
ライブラリのバージョン:
- 春の統合: 3.0.1
- 春のフレームワーク: 4.0.2
- ジャクソン データバインド: 2.3.1