当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud Stream-例程KeyExpress属性不起作用

苏富
2023-03-14

我正在使用带有RabbitMQ的Spring Cloud stream。(Spring cloud版本是Greenwich)我有一个主题和两个队列,我想使用路由键向每个队列发送消息。

但它不能正常工作。

当我通过每个@输出通道发送消息时,消息会同时发送到两个队列。(我希望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

我也尝试没有要求的Gorup和bindingRoutingKey只留下在生产者配置中的例程KeyExpress单独。

我在yaml中为“queue1”或“queue1”提供了例程KeyExpress值。

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

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

共生成4条消息。

我怎么了?

任何帮助都将不胜感激。

共有1个答案

凤棋
2023-03-14

您缺少。rabbitmq特定粘合剂属性的rabbitmq元素。

请参阅文档。

以下属性仅适用于Rabbit生产者,并且必须以spring作为前缀。云流动兔子绑定。

 类似资料:
  • 我在一个android应用程序中工作,正在使用一个DialogFragment来显示一个对话框,我想让那个DialogFragment不可取消。我已经将对话框可取消属性设置为false,但它仍然不受影响。 请查看我的代码,并建议我一个解决方案。

  • 问题内容: 自最新版本以来,我经历了Chrome的某些意外行为:在Firefox中,此代码可以正常运行: 它在Chrome中不起作用(只需下载一个名为“下载”的文件),但是以前效果很好。我必须更改一下它又能正常工作吗? 问题答案: 经过研究,我终于找到了您的问题。 下载属性: 如果存在HTTP标头Content-Disposition:,并且提供的文件名与此属性不同,则HTTP标头的优先级高于此属

  • 我尝试将ini文件解析为可以在ant脚本中使用的属性。我有以下几点: 我试图做的是解析所有的name=value对,并将它们放入属性中,如:section。名称=值; 不知何故,“echoMsg”目标中没有记住该部分。我想记住部门名称。 所以 应该成为: 这是我的ant脚本的输出: 如您所见,未设置最后一个“${prevSection}”。我希望它是“全球性的”。 我试着用它来代替财产,但没有区别

  • 问题内容: 我需要在CSS中使用属性选择器来更改不同颜色和图像上的链接,但是它不起作用。 我有这个HTML: 而这个CSS: 为什么背景不是红色的? 问题答案: 在href后面使用$。这将使属性值匹配字符串的结尾。

  • 我的一个Mapstruct映射器没有使用另一个映射器与 我们的将实体映射到DTO。一个包含一个属性,我正在尝试从该属性映射到一个DTO。 因此,问题在于嵌套对象,即到。 以下是源代码: 从ValidationSupport NeedMapper.java: 来自ActivityMapper.java: 来自ValidationSupportNeedEntity.java(实体) 来自Validat

  • 问题内容: 我的边框颜色有问题。没用 我是CSS新手, 问题答案: 默认情况下,is 和is 因此,您需要将它们设置为和。您可以将所有边框属性组合为一个,如下所示: