gpt4 book ai didi

java - Spring Cloud Stream RabbitMQ 多个接收者

转载 作者:行者123 更新时间:2023-11-30 10:10:34 24 4
gpt4 key购买 nike

我很难掌握 RabbitMQ 和 Spring Cloud Stream 如何协同工作的知识。我想要做的是以下内容(基本解释):

我有一个生成消息的生产者,这些消息类似于:SendEmail、ReceiveEmail 和 ErrorOccurred。这些将继续在消息总线上。然后我有 3 个消费者。一个 LogService 一个 Emailservice 和一个 ParserService

EmailService 将获取所有 Email 消息,LogService 将获取 ErrorOccurred(由其他生成的生产者)和 EmailSend 消息。最后,ParserService 只会收到 ReceiveEmail 消息。

我似乎无法使用 Spring Cloud Stream 配置它。我可以从一个生产者向一个接收者发送和接收单个事件,从一个生产者向多个订阅者发送和接收单个事件(一个主题、多个队列但没有通配符)。

spring:
rabbitmq:
host: localhost
username: guest
password: guest
cloud:
stream:
bindings:
output: # <-- Question 1
destination: # <-- Question 2

与标准的Source.class接口(interface)绑定(bind)。

EmailService:

spring:
rabbitmq:
host: localhost
username: guest
password: guest
cloud:
stream:
bindings:
input:
destination: # <-- Question 3

LogService 同上。

问题1:我只定义了一个输出,明明需要2个?但是我不能使用“输入”作为 channel 名称,对吗?我需要使用 Output("CHANNEL NAME HERE") 配置我自己的 channel 名称。但是这个 channel 名称是什么意思?我没有看到 channel 名称再次出现在 RabbitMQ 网络界面或其他任何地方。这只是应用程序内部命名吗?

问题2:据我了解,这是交易所名称。如果我正确阅读了文档,我需要一个主题类型的 Email 消息交换,因为我有 3 个接收者。那我还有3个单独的队列吗?但是我如何配置 1 个队列仅接收 EmailReceived,1 个队列接收所有消息,1 个队列接收 EmailSend 消息?

问题 3:我是否需要为每个要发送的不同事件进行交换?我不应该能够订阅所有 email.* 事件吗?如果我那样使用它,我会创建一个具有该确切名称的队列和一个具有该确切名称的主题。据我所知,这是不对的。

我想这样做,https://www.rabbitmq.com/tutorials/tutorial-five-spring-amqp.html .但问题是,他们使用基本的 RabbitMQ Spring AMQP,而我选择使用 Spring Cloud Stream(因为它被宣传为进行微服务通信等的工具)。

我应该使用 SCS 还是应该使用 Spring-AMQP 库?如果是这样,我应该如何配置呢?如果我需要解释更多,请要求任何澄清。提前致谢!

最佳答案

在生产者方面,您只需要一个目的地;设置 routingKeyExpression根据消息中的某些内容(例如 header - routing-key-expression=headers[route] )路由到 3 个队列之一。

您还可以让多个输出 channel 指向同一个目的地(但使用不同的 - 文字 - 路由键表达式 'email.foo' )。

在消费者方面;你可以使用相同的目的地,但每个消费者都会有一个队列绑定(bind)到该交换机,在 bindingRoutingKey 旁边例如,email.# .

参见 the documentation .

关于java - Spring Cloud Stream RabbitMQ 多个接收者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52759898/

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