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