入站訊息轉換

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