Spring AMQP 到 Spring Cloud Stream 迁移 - 现有队列

Spring AMQP to Spring Cloud Stream migration - existing queue

我正在尝试将 Spring Cloud Stream 添加到使用 Spring AMQP 和 RabbitMQ 的现有项目中。

我有以下兔子配置:

生产者交易所名称:producer.mail-sent.exchange

消费者队列名称:consumer.mail-sent.queue

在生产者方面,我这样配置: spring: cloud: stream: bindings: output: contentType: application/json destination: producer.mail-sent.exchange

并使用以下代码:

@Autowired
private Source source;
...
source.output().send(MessageBuilder.withPayload(someStuff).build());
...

在消费者方面,我有以下配置: spring: cloud: stream: bindings: input: contentType: application/json destination: producer.mail-sent.exchange group: consumer.mail-sent.queue

使用以下代码:

@EnableBinding(Sink.class)
...
@StreamListener(Sink.INPUT)
public void handle(String someStuff) {
    log.info("some stuff is received: " + someStuff);
}

而且它似乎有效。 :) 但!在兔子方面,我有一个名为 producer.mail-sent.exchange.consumer.mail-sent.queue 的新队列,但我希望它使用名为 consumer.mail-sent.queue.

的现有队列

有什么办法可以实现吗?

暂不支持;虽然许多属性是可配置的(路由键等),但队列名称始终是 <destination>.<group>.

如果您想从现有应用程序中使用,请考虑使用 @RabbitListner 而不是 @StreamListener

随意打开一个 GitHub Issue 引用此 post - 许多其他 "opinionated" 配置设置(例如路由键)是可配置的,但不是队列名称本身。也许我们可以添加一个布尔值 includeDestInQueueName。在问题中引用此问题。