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