我有一个使用延迟消息交换插件的x-delayed-message
类型的RabbitMQ交换。
我知道当我返回一个设置了头AmqpHeaders.DELAY
的org.springframework.messaging.Message
时,延迟功能就会起作用。我假设框架在某个时刻将amqp_delay
(AmqpHeaders.DELAY
的值)转换为x-delay
。
但是当我返回一个org.springframework.amqp.core.Message
时,消息只是用头amqp_delay
而不是RabbitMQ期望的x-delay
头发送。
这是Spring AMQP的疏忽吗?
如果AmqpHeaders
类在spring-amqp
工件中并且在org.springframework.amqp.support
下,那么AmqpHeaders.DELAY
的值不应该是x-delay
而不是amqp_delay
。
如果不是,框架不应该至少转换头关键字吗?
还是我错过了什么?
发布于 2019-05-14 03:15:31
这样的转换是在SimpleAmqpHeaderMapper
中完成的
.acceptIfNotNull(getHeaderIfAvailable(headers, AmqpHeaders.DELAY, Integer.class),
amqpMessageProperties::setDelay)
它是从MessagingMessageConverter
使用的。这个是在RabbitMessagingTemplate
中使用的。
因此,如果您自己创建org.springframework.amqp.core.Message
,则实际上需要填充x-delay
标头。只有在org.springframework.messaging.Message
的情况下才使用AmqpHeaders
。
https://stackoverflow.com/questions/56118402
复制相似问题