入站消息转换
到达通道适配器或网关的入站消息会使用消息转换器转换为 spring-messaging
Message<?>
负载。默认情况下,使用 SimpleMessageConverter
,它处理 Java 序列化和文本。默认情况下,消息头使用 DefaultHeaderMapper.inboundMapper()
进行映射。如果发生转换错误且未定义错误通道,则异常会抛给容器,并由监听器容器的错误处理器处理。默认错误处理器会将转换错误视为致命错误,消息将被拒绝(如果队列已配置,则路由到死信交换机)。如果定义了错误通道,则 ErrorMessage
负载是 ListenerExecutionFailedException
,包含属性 failedMessage
(无法转换的 Spring AMQP 消息)和 cause
(原因)。如果容器的 AcknowledgeMode
是 AUTO
(默认值),并且错误流处理错误时未抛出异常,则原始消息将被确认。如果错误流抛出异常,则异常类型结合容器的错误处理器将决定消息是否重新入队。如果容器配置为 AcknowledgeMode.MANUAL
,则负载是 ManualAckListenerExecutionFailedException
,包含额外的属性 channel
和 deliveryTag
。这使得错误流能够对消息调用 basicAck
或 basicNack
(或 basicReject
),从而控制其处理结果。