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