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_delayAmqpHeaders.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.

的情况下使用