Spring AMQP:RabbitMQ 延迟消息交换:`amqp_delay` 未转换为 `x-delay`
Spring AMQP: RabbitMQ Delayed Message Exchange: `amqp_delay` not translated to `x-delay`
我有一个 x-delayed-message
类型的 RabbitMQ 交换,使用延迟消息交换插件。
我知道当我 return 一个带有 header AmqpHeaders.DELAY
集的 org.springframework.messaging.Message
时,延迟功能会起作用。我假设框架在某个时候将 amqp_delay
(AmqpHeaders.DELAY
的值)转换为 x-delay
.
但是当我返回 org.springframework.amqp.core.Message
时,消息只是使用 header amqp_delay
而不是 RabbitMQ 期望的 x-delay
header 发送。
这是 Spring AMQP 的疏忽吗?
鉴于 AmqpHeaders
class 在 spring-amqp
工件中并且在 org.springframework.amqp.support
之下,AmqpHeaders.DELAY
的值不应该是 x-delay
而不是 amqp_delay
.
如果不是,框架不应该至少翻译 header 键吗?
还是我漏掉了什么?
这样的转换是在 SimpleAmqpHeaderMapper
:
.acceptIfNotNull(getHeaderIfAvailable(headers, AmqpHeaders.DELAY, Integer.class),
amqpMessageProperties::setDelay)
这是从MessagingMessageConverter
开始使用的。而这个用在了RabbitMessagingTemplate
。
因此,如果您自己创建 org.springframework.amqp.core.Message
,则确实需要填充 x-delay
header。 AmqpHeaders
仅在 org.springframework.messaging.Message
.
的情况下使用
我有一个 x-delayed-message
类型的 RabbitMQ 交换,使用延迟消息交换插件。
我知道当我 return 一个带有 header AmqpHeaders.DELAY
集的 org.springframework.messaging.Message
时,延迟功能会起作用。我假设框架在某个时候将 amqp_delay
(AmqpHeaders.DELAY
的值)转换为 x-delay
.
但是当我返回 org.springframework.amqp.core.Message
时,消息只是使用 header amqp_delay
而不是 RabbitMQ 期望的 x-delay
header 发送。
这是 Spring AMQP 的疏忽吗?
鉴于 AmqpHeaders
class 在 spring-amqp
工件中并且在 org.springframework.amqp.support
之下,AmqpHeaders.DELAY
的值不应该是 x-delay
而不是 amqp_delay
.
如果不是,框架不应该至少翻译 header 键吗?
还是我漏掉了什么?
这样的转换是在 SimpleAmqpHeaderMapper
:
.acceptIfNotNull(getHeaderIfAvailable(headers, AmqpHeaders.DELAY, Integer.class),
amqpMessageProperties::setDelay)
这是从MessagingMessageConverter
开始使用的。而这个用在了RabbitMessagingTemplate
。
因此,如果您自己创建 org.springframework.amqp.core.Message
,则确实需要填充 x-delay
header。 AmqpHeaders
仅在 org.springframework.messaging.Message
.