入站訊息轉換
到達通道介面卡或閘道器的入站訊息會使用訊息轉換器轉換為 spring-messaging
Message<?>
負載。預設情況下,使用 SimpleMessageConverter
,它處理 Java 序列化和文字。預設情況下,訊息頭使用 DefaultHeaderMapper.inboundMapper()
進行對映。如果發生轉換錯誤且未定義錯誤通道,則異常會拋給容器,並由監聽器容器的錯誤處理器處理。預設錯誤處理器會將轉換錯誤視為致命錯誤,訊息將被拒絕(如果佇列已配置,則路由到死信交換機)。如果定義了錯誤通道,則 ErrorMessage
負載是 ListenerExecutionFailedException
,包含屬性 failedMessage
(無法轉換的 Spring AMQP 訊息)和 cause
(原因)。如果容器的 AcknowledgeMode
是 AUTO
(預設值),並且錯誤流處理錯誤時未丟擲異常,則原始訊息將被確認。如果錯誤流丟擲異常,則異常型別結合容器的錯誤處理器將決定訊息是否重新入隊。如果容器配置為 AcknowledgeMode.MANUAL
,則負載是 ManualAckListenerExecutionFailedException
,包含額外的屬性 channel
和 deliveryTag
。這使得錯誤流能夠對訊息呼叫 basicAck
或 basicNack
(或 basicReject
),從而控制其處理結果。