入站訊息轉換
入站訊息在抵達通道配接器或閘道時,會使用訊息轉換器轉換為 spring-messaging
Message<?>
酬載。預設情況下,會使用 SimpleMessageConverter
,它會處理 Java 序列化和文字。標頭預設會使用 DefaultHeaderMapper.inboundMapper()
進行對應。如果發生轉換錯誤,且未定義錯誤通道,則例外狀況會擲回至容器,並由接聽器容器的錯誤處理常式處理。預設錯誤處理常式會將轉換錯誤視為嚴重錯誤,訊息將會被拒絕(並路由至死信交換器,如果佇列已如此設定)。如果已定義錯誤通道,則 ErrorMessage
酬載會是 ListenerExecutionFailedException
,其屬性包含 failedMessage
(無法轉換的 Spring AMQP 訊息)和 cause
。如果容器的 AcknowledgeMode
為 AUTO
(預設值),且錯誤流程消耗了錯誤而未擲回例外狀況,則原始訊息將會被確認。如果錯誤流程擲回例外狀況,則例外狀況類型將與容器的錯誤處理常式結合,以判斷是否重新排隊訊息。如果容器設定為 AcknowledgeMode.MANUAL
,則酬載會是 ManualAckListenerExecutionFailedException
,其額外屬性包含 channel
和 deliveryTag
。這讓錯誤流程能夠針對訊息呼叫 basicAck
或 basicNack
(或 basicReject
),以控制其處置方式。