受信メッセージの変換
チャネルアダプターまたはゲートウェイに到着した受信メッセージは、メッセージコンバーターを使用して spring-messaging
Message<?>
ペイロードに変換されます。デフォルトでは、java シリアライゼーションとテキストを処理する SimpleMessageConverter
が使用されます。ヘッダーは、デフォルトで DefaultHeaderMapper.inboundMapper()
を使用してマップされます。変換エラーが発生し、エラーチャネルが定義されていない場合、例外がコンテナーにスローされ、リスナーコンテナーのエラーハンドラーによって処理されます。デフォルトのエラーハンドラーは変換エラーを致命的なものとして扱い、メッセージは拒否されます (キューがそのように構成されている場合は、配信不能交換にルーティングされます)。エラーチャネルが定義されている場合、ErrorMessage
ペイロードは、プロパティ failedMessage
(変換できなかった Spring AMQP メッセージ) および cause
を持つ ListenerExecutionFailedException
です。コンテナー AcknowledgeMode
が AUTO
(デフォルト) であり、エラーフローが例外をスローせずにエラーを消費する場合、元のメッセージが確認されます。エラーフローが例外をスローする場合、コンテナーのエラーハンドラーと組み合わせた例外の種類によって、メッセージが再度キューに入れられるかどうかが決まります。コンテナーが AcknowledgeMode.MANUAL
で構成されている場合、ペイロードは追加のプロパティ channel
および deliveryTag
を持つ ManualAckListenerExecutionFailedException
です。これにより、エラーフローがメッセージの basicAck
または basicNack
(または basicReject
) を呼び出して、メッセージの処理を制御できるようになります。