Spring Cloud Stream-routingKeyExpression属性不起作用

时间:2019-06-10 15:02:44

标签: spring-cloud-stream spring-rabbitmq

我在RabbitMQ中使用了春季云流。 (春季云版本是格林威治) 我有一个带有两个队列的主题,我想使用路由键将消息发送到每个队列。

但是它不能正常工作。

当我通过每个@Output通道发送消息时,消息会进入两个队列。 (我想要1条消息放入1个队列,但1条消息进入2个队列)

我的生产者配置在下面(实际代码在yaml中)

Spring.cloud.stream.bindings.output1.destination=topic-a
Spring.cloud.stream.bindings.output1.producer.requiredGroups=queue1
Spring.cloud.stream.bindings.output1.producer.bindingRoutingKey=queue1
Spring.cloud.stream.bindings.output1.producer.routingKeyExpression=queue1

Spring.cloud.stream.bindings.output2.destination=topic-a
Spring.cloud.stream.bindings.output2.producer.requiredGroups=queue2
Spring.cloud.stream.bindings.output2.producer.bindingRoutingKey=queue2
Spring.cloud.stream.bindings.output2.producer.routingKeyExpression=queue2

我的使用者配置在下面

spring.cloud.stream.bindings.input1.destination=topic-a
spring.cloud.stream.bindings.input1.group=queue1
spring.cloud.stream.bindings.input1.consumer.durableSubscription=true
spring.cloud.stream.bindings.input1.consumer.bindingRoutingKey=queue1

spring.cloud.stream.bindings.input2.destination=topic-a
spring.cloud.stream.bindings.input2.group=queue2
spring.cloud.stream.bindings.input2.consumer.durableSubscription=true
spring.cloud.stream.bindings.input2.consumer.bindingRoutingKey=queue2

我也尝试了没有requiredGorups和bindingRoutingKey的情况,只在生产者配置中单独保留routingKeyExpression。

我将yaml中的routingKeyExpression值赋予了'''queue1'''或'“ queue1'”。

如果我发送带有output1的“第一条”消息和带有output2的“第二条”消息,

“第一”和“第二”消息位于topic-a.queue1中。 (路由键也显示为'topic-a'),而相同的两条消息也位于topic-a.queue2中。

总共生成4条消息。

我怎么了?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您缺少特定于Rabbitmq的活页夹属性的flip'元素。

请参见the documentation

  

以下属性仅适用于Rabbit生产者,并且必须以.rabbit为前缀。