我使用延迟的消息交换插件进行了x-delayed-message
类型的RabbitMQ交换。
我知道当我返回设置了标头org.springframework.messaging.Message
的{{1}}时,延迟功能有效。我认为该框架有时会将AmqpHeaders.DELAY
(amqp_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}}。
如果不是,那么框架至少不应该翻译标题键吗?
还是我在这里想念东西?
答案 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
的情况下使用。