【发布时间】:2020-09-10 17:08:45
【问题描述】:
我有一个要求,在部署rabbitmq消费者组件时,如果队列上有任何消息,那么一旦部署完成,这个消费者组件不应该立即消费消息。
部署后对此组件进行健全性测试,一旦健全性测试完成,那么只有这个消费者组件应该开始消费队列中的消息。
我在消费者组件上设置了 autostart = "false",这样消费者就不会在部署完成后消费消息。 健全性测试完成后,我使用 rest 调用启动容器侦听器。
问题是健全性测试也在同一个队列上发布消息。由于 autostart = "false",sanity test 发布的消息正在队列中等待,因此 Sanit 测试失败。
有没有办法在生产消息仍在队列中等待但可以使用健全性测试消息时?
@RabbitListener(id = LISTENER_ID,
bindings = @QueueBinding(exchange = @Exchange(value = "${listener.exchange}", type = "topic"),
value = @Queue(value = "${listener.queue}", durable = "true"), key = "${listener.routingKey}"),
containerFactory = "rabbitListenerContainerFactory", autoStartup = "false" )
public void receiveMessage(@Valid @Payload RequestMessage requestMessage,
@Headers Map<String, Object> requestHeaders) {
//some code
}
【问题讨论】:
-
一般情况下,会维护不同的rabbitmq 实例——例如:一个用于测试和生产..所以,您将获得2 个不同的交换。如果您想为 dev & prod & 2 个不同的队列保持相同的交换,这也是可能的,但不推荐。无论如何,策略是使用 spring 配置文件,因此您可以为 dev 和 prod 维护不同的配置
标签: rabbitmq spring-amqp spring-rabbit