Rabbitmq 如何为生产者和消费者成功设置路由密钥
我正在构建一个基于SpringCloud流的应用程序,exchange类型为topic,消息从topic exchange发送到2个队列消费者组。场景是这样的: 我的应用程序中的服务A希望根据不同的用例场景(如预订、取消、更新等),通过名为“预约请求”的交换向服务B和服务C发送预约类型的消息 因此,带有键“约会.book.B”或“约会.cancel.B”的消息应转到“消费者队列组约会”。B 带有键“约会.book.C”或“约会.cancel.C”的邮件应转到消费者队列组约会.C 如何成功地做到这一点 生产性服务业的结构:Rabbitmq 如何为生产者和消费者成功设置路由密钥,rabbitmq,spring-cloud-stream,Rabbitmq,Spring Cloud Stream,我正在构建一个基于SpringCloud流的应用程序,exchange类型为topic,消息从topic exchange发送到2个队列消费者组。场景是这样的: 我的应用程序中的服务A希望根据不同的用例场景(如预订、取消、更新等),通过名为“预约请求”的交换向服务B和服务C发送预约类型的消息 因此,带有键“约会.book.B”或“约会.cancel.B”的消息应转到“消费者队列组约会”。B 带有键“约会.book.C”或“约会.cancel.C”的邮件应转到消费者队列组约会.C 如何成功地做到这
spring.cloud.stream.bindings.output.destination=appointments-request
spring.cloud.stream.bindings.input.destination=appointments-reply
spring.cloud.stream.rabbit.bindings.output.producer.exchangeType=topic
spring.cloud.stream.rabbit.bindings.output.producer.routingKeyExpression=
appointments.#.#
消费者服务B的配置:
spring.cloud.stream.rabbit.bindings.input.consumer.exchangeType=direct
spring.cloud.stream.rabbit.bindings.input.consumer.group=
appointments.docmgmt
spring.cloud.stream.rabbit.bindings.input.consumer.bindingRoutingKey=
appointments.docmgmt
spring.cloud.stream.rabbit.bindings.input.consumer.routingKeyExpression=
appointments.#.docmgmt
生产者服务A有以下方法来设置路由密钥
public boolean send(AppointmentEvent appointmentEvent)
{
logger.info("Sending event {} ",appointmentEvent);
return this.source.output().
send(MessageBuilder.withPayload(appointmentEvent).
setHeader(SimpMessageHeaderAccessor.DESTINATION_HEADER,
"appointments.book.docmgmt").build());
}
我的服务之间的通信不起作用。预约
不能在生产者端使用通配符
你需要像这样的东西
spring.cloud.stream.rabbit.bindings.output.producer.routingKeyExpression=headers['routingKey']
然后生产者将routingKey头设置为每条消息所需的值
您不应该真正使用Simp头文件;那是为了跺脚;使用您自己的标题。非常感谢Gary!我按照您上面提到的方式对其进行了更改,现在可以使用了-