如何为生产者设置路由键

Tom*_*cek 3 spring-cloud spring-cloud-stream

我有以下基于 Spring Cloud Stream 的应用程序的测试场景。我的应用程序有一个主题,有两个队列。第一个队列的 BindingKey 被命名为“城市”,第二个队列的绑定密钥是“人”。

请问如何为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
Run Code Online (Sandbox Code Playgroud)

发布到生产频道时,如何区分消息将发送到哪里(城市或人员队列)的唯一方法是通过“spring.cloud.stream.bindings.productionChannel.producer.requiredGroups”属性,但这是非常不可用的。因为我不想知道我的消息将要到达的队列的任何信息......这是 AMPQ 反模式。

我不想要更简单的东西,然后在发布到生产频道时通过RabbitTemplate.setRoutingKey(String routingKey)方法拥有类似的功能...:-(

Gar*_*ell 5

使用routingKeyExpression的制片方-看到的文档

因为它是一个表达式,所以你需要引号:'cities'或者如果同一个生产者发送给两者,比如headers['whereToSendHeader'].