如何为生产者设置路由键
Howto set routing key for producer
我正在为基于 Spring Cloud Stream 的应用程序进行以下测试。
我的应用程序有一个主题,有两个队列。第一个队列的 BindingKey 命名为 "cities",第二个队列的绑定键为 "persons".
请问如何为 Spring Cloud Stream Rabbit 生产者设置路由键???区分消息将被消费到哪里?
这是我的绑定配置:
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
当发布到 producingChannel 时,如何区分消息将发送到哪里(城市或人员队列)的唯一方法是通过 "spring.cloud.stream.bindings.producingChannel.producer.requiredGroups" 属性,但这非常不可用。因为我不想知道我的消息将要到达的队列...这是 AMPQ 反模式。
我不想要更简单的东西,然后只需要类似的功能,比如在发布到 producingChannel 时通过 RabbitTemplate.setRoutingKey(String routingKey) 方法...:-(
在生产者端使用 routingKeyExpression
- 请参阅 the documentation。
因为它是一个表达式,所以你需要引号:'cities'
或者如果同一个生产者发送给两者,比如 headers['whereToSendHeader']
.
是的,非常感谢。
添加
spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='persons'
使消息进入 streaming.persons 队列并
spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='cities'
在 streaming.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
时在生产者启动时绑定队列,则会使用它
另一种(与 AMQP 无关的)方法是使用动态目标支持,即 http://docs.spring.io/autorepo/docs/spring-cloud-stream-docs/Chelsea.SR2/reference/htmlsingle/#dynamicdestination
Rabbit 的主要区别是你最终会有 2 个独立的交换('cities' 和 'persons')——所以它不利用那里的路由支持,但它可移植到其他消息系统,例如 Kafka。
我正在为基于 Spring Cloud Stream 的应用程序进行以下测试。 我的应用程序有一个主题,有两个队列。第一个队列的 BindingKey 命名为 "cities",第二个队列的绑定键为 "persons".
请问如何为 Spring Cloud Stream Rabbit 生产者设置路由键???区分消息将被消费到哪里?
这是我的绑定配置:
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
当发布到 producingChannel 时,如何区分消息将发送到哪里(城市或人员队列)的唯一方法是通过 "spring.cloud.stream.bindings.producingChannel.producer.requiredGroups" 属性,但这非常不可用。因为我不想知道我的消息将要到达的队列...这是 AMPQ 反模式。
我不想要更简单的东西,然后只需要类似的功能,比如在发布到 producingChannel 时通过 RabbitTemplate.setRoutingKey(String routingKey) 方法...:-(
在生产者端使用 routingKeyExpression
- 请参阅 the documentation。
因为它是一个表达式,所以你需要引号:'cities'
或者如果同一个生产者发送给两者,比如 headers['whereToSendHeader']
.
是的,非常感谢。
添加
spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='persons'
使消息进入 streaming.persons 队列并
spring.cloud.stream.rabbit.bindings.producingChannel.producer.routingKeyExpression='cities'
在 streaming.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
时在生产者启动时绑定队列,则会使用它另一种(与 AMQP 无关的)方法是使用动态目标支持,即 http://docs.spring.io/autorepo/docs/spring-cloud-stream-docs/Chelsea.SR2/reference/htmlsingle/#dynamicdestination
Rabbit 的主要区别是你最终会有 2 个独立的交换('cities' 和 'persons')——所以它不利用那里的路由支持,但它可移植到其他消息系统,例如 Kafka。