春季AMQP:RabbitMQ延迟消息交换:“ amqp_delay”未转换为“ x-delay”

时间:2019-05-13 19:00:32

标签: spring-amqp

我使用延迟的消息交换插件进行了x-delayed-message类型的RabbitMQ交换。

我知道当我返回设置了标头org.springframework.messaging.Message的{​​{1}}时,延迟功能有效。我认为该框架有时会将AmqpHeaders.DELAYamqp_delay的值)转换为AmqpHeaders.DELAY

但是当我报复x-delay时,消息只是以标头org.springframework.amqp.core.Message发送,而不是RabbitMQ期望的amqp_delay标头发送。

这是Spring AMQP的疏忽吗?

鉴于x-delay类位于AmqpHeaders工件中,并且位于spring-amqp下,org.springframework.amqp.support的值不应为AmqpHeaders.DELAY而不是{{ 1}}。

如果不是,那么框架至少不应该翻译标题键吗?

还是我在这里想念东西?

1 个答案:

答案 0 :(得分:2)

这样的转换是在SimpleAmqpHeaderMapper中完成的:

.acceptIfNotNull(getHeaderIfAvailable(headers, AmqpHeaders.DELAY, Integer.class),
                amqpMessageProperties::setDelay)
MessagingMessageConverter开始使用的

RabbitMessagingTemplate中使用了这个。

因此,如果您自己创建org.springframework.amqp.core.Message,则确实需要填充x-delay标头。 AmqpHeaders仅在org.springframework.messaging.Message的情况下使用。