Spring cloud 如何为生产者设置路由密钥

Spring cloud 如何为生产者设置路由密钥,spring-cloud,spring-cloud-stream,Spring Cloud,Spring Cloud Stream,我正在为基于SpringCloudStream的应用程序进行以下测试场景。 我的应用程序有一个主题和两个队列。第一个队列的BindingKey命名为“cities”,第二个队列的BindingKey命名为“persons” 请说明如何为Spring Cloud Stream设置路由密钥???查询消息将在何处使用 这是我的绑定配置: spring.config.name=streaming spring.cloud.stream.bindings.citiesChannel.destinatio

我正在为基于SpringCloudStream的应用程序进行以下测试场景。 我的应用程序有一个主题和两个队列。第一个队列的BindingKey命名为“cities”,第二个队列的BindingKey命名为“persons”

请说明如何为Spring Cloud Stream设置路由密钥???查询消息将在何处使用

这是我的绑定配置:

spring.config.name=streaming

spring.cloud.stream.bindings.citiesChannel.destination=streamInput
spring.cloud.stream.bindings.citiesChannel.group=cities
spring.cloud.stream.rabbit.bindings.citiesChannel.consumer.durableSubscription=true
spring.cloud.stream.rabbit.bindings.citiesChannel.consumer.bindingRoutingKey=cities

spring.cloud.stream.bindings.personsChannel.destination=streamInput
spring.cloud.stream.bindings.personsChannel.group=persons
spring.cloud.stream.rabbit.bindings.personsChannel.consumer.durableSubscription=true
spring.cloud.stream.rabbit.bindings.personsChannel.consumer.bindingRoutingKey=persons

spring.cloud.stream.bindings.producingChannel.destination=streamInput
只有通过spring.cloud.stream.bindings.producingChannel.producer.requiredGroups“属性才能区分在发布到生产频道时消息将发送到哪里(城市或人员队列),但这是非常不可用的。因为我不想知道我的消息将要到达的队列的任何信息…这是AMPQ反模式


我不想要比这更简单的东西,只要有类似的功能,比如通过RabbitTemplate.setRoutingKey(String routingKey)
方法发布到producingChannel…:-(

在生产者端使用
routingKeyExpression
),请参阅

因为它是一个表达式,所以您需要引号:
'cities'
或者如果同一个制作人同时发送给这两个城市,比如
标题['whereToSendHeader']
是的,非常感谢

添加

spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='persons'
使消息进入流式处理队列,然后

spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='cities'
在流媒体。城市队列中。正是我想要的


谢谢。看来我们还是要在项目中使用Spring Cloud Stream…:-)

对于使用yaml的人:

spring:
  cloud:
    stream:
      rabbit:
        bindings:
          somechannel:
            producer:
              bindingRoutingKey: routingKey
              routing-key-expression: '"routingKey"'

请注意上面的bindingRoutingKey-如果您希望在使用spring.cloud.stream.bindings.someChannel.producer.requiredGroups时在producer启动时绑定队列,则使用此键。另一种(AMQP不可知)方法是使用动态目标支持,即


Rabbit的主要区别在于,最终将有两个单独的交换(“城市”和“个人”)——因此它没有利用那里的路由支持,但它可以移植到其他消息传递系统,例如Kafka

注意,如果在yml中执行此操作,请使用3个单引号,如:routingKeyExpression:“产品”