入站訊息轉換

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