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