gpt4 book ai didi

针对不同消费者的每条消息的 Spring Cloud Stream 主题

转载 作者:行者123 更新时间:2023-12-02 20:25:11 25 4
gpt4 key购买 nike

我正在寻找的拓扑是

enter image description here

到目前为止,我还没有看到在 Cloud Stream 中定义每条消息的主题的方法。我知道消费者将绑定(bind)到特定主题,但是生产者在将消息发送到交换器之前如何设置每条消息的主题?

source.output().send(MessageBuilder.withPayload(myMessage).build());

不提供任何方法来设置交换的主题以路由到正确的消费者。

或者也许我没有正确理解某些内容?

更新

由于bindingRoutingKey,我预计不会在消费者中收到消息是2222我用 routeTo 发送1111 。但我仍然在消费者身上收到它。

生产者属性:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

spring.cloud.stream.bindings.output.content-type=application/json
spring.cloud.stream.bindings.output.destination=messageExchange
spring.cloud.stream.rabbit.bindings.output.producer.routing-key-expression=headers['routeTo']


@EnableBinding(Source.class)
@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

发件人:

source.output().send(MessageBuilder.withPayload(mo).setHeader("routeTo", "1111").build());

消费者:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

spring.cloud.stream.bindings.input.destination=messageExchange
spring.cloud.stream.rabbit.bindings.input.consumer.bindingRoutingKey=2222

应用:

@SpringBootApplication
@EnableBinding(Sink.class)
public class Application {

private static final Logger log = LoggerFactory.getLogger(Application.class);

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

@StreamListener(Sink.INPUT)
public void ReceiveMo(String moDTO) {
log.info("Message received moDTO: {}", moDTO);
}

}

第二次更新

根据下面已接受的答案中的建议。我能够让它发挥作用。需要使用其 UI 从 RabbitMQ 中删除交换和队列,并重新启动 RabbitMQ docker 镜像。

最佳答案

routingKeyExpression rabbitmq producer property .

例如...producer.routing-key-expression=headers['routeTo']

然后

source.output().send(MessageBuilder.withPayload(myMessage)
.setHeader("routeTo", "Booking.new")
.build());

请注意,目标是交换名称。默认情况下, Binder 需要 Topic交换。如果您希望使用直接交换,则必须设置 exchangeType属性。

关于针对不同消费者的每条消息的 Spring Cloud Stream 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50190785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com