那不同的业务,可能会共用同一个RabbitMQ组件,不同的业务之间是怎么区分 他这个消息是谁去消费的?就我发的消息,谁去消费,谁不消费?
问题
那不同的业务,就是我们大家用不同的业务,可能会共用同一个RabbitMQ组件,不同的业务之间是怎么区分的?他这个消息是谁去消费的?就我发的消息,谁去消费,谁不消费?
回答Demo
在 RabbitMQ 中,不同业务之间的区分主要依赖于 Exchange(交换机)、Queue(队列) 和 Routing Key(路由键) 这三个核心概念。
1. Exchange(交换机)
- 作用: 当一个消息被发布时,发布者将消息发送到一个交换机。交换机负责接收消息并根据其类型和绑定规则将消息分发给一个或多个队列。
2. Queue(队列)
- 作用: 消息在交换机分发后会被存放到一个或多个队列中。每个业务通常可以建立专属于自己的队列,或在同一 RabbitMQ 实例中,不同业务共享同一个队列但使用特定的标识或策略来区分。
- 业务隔离: 当不同的业务有各自的队列时,只有向特定业务队列发送消息,该业务的消费者才能接收到消息。这样就实现了业务间的逻辑隔离。
3. Routing Key(路由键)与 Binding(绑定)
- 路由键: 在发布消息时,发布者可以为消息设置一个路由键。这个键在交换机和队列之间建立了一个“过滤条件”。
- 绑定: 队列在绑定到交换机时,可以指定一个或多个绑定规则(绑定键),这些规则决定了哪些消息(依据路由键匹配)会被存入该队列。
- 消息定向: 例如,在 Direct Exchange 中,如果一个消息的路由键是
order.create,只有绑定了order.create的队列会接收到该消息。如果不同业务所对应的队列绑定了不同的路由键,就能确保消息只送达目标业务。
4. 消息的消费
- 消费者订阅队列: 每个业务系统会通过消费者订阅对应的队列。当消息进入队列后,由订阅该队列的消费者进行消费。
- 消息处理逻辑: 消费者可以根据自己的业务逻辑对消息进行处理。因为队列是根据绑定规则分配给各个特定业务的,所以每个业务只会消费到自己关心的消息。
- 消息确认: 为了确保消息的可靠性和不重复消费,消费者通常会在成功处理消息后发送确认(acknowledgement)给 RabbitMQ。如果没有确认,消息可能会重新入队并被其他消费者消费。
5. 不同业务如何共用同一个 RabbitMQ 组件
- 共享与隔离: 即使多个业务共用同一个 RabbitMQ 服务实例,也可以通过不同的交换机、队列和绑定规则实现消息的隔离。每个业务可以维护自己独立的交换机与队列配置,也可以在同一个交换机下使用不同的路由键实现逻辑分离。
- 权限控制: RabbitMQ 还支持权限配置。不同的业务可以被授予不同的访问权限,只有授权的业务才能操作或者订阅到特定的队列和交换机,从而在安全层面实现隔离。
总结
- 当你发布一条消息时,你需要指定目标交换机及相应的路由键。
- 交换机根据绑定规则将消息分发到与该路由键匹配的队列中。
- 各个业务的消费者分别订阅与其业务相关的队列,因此只有绑定匹配规则的队列中的消息会被对应业务的消费者消费。
- 这样设计确保了消息能被精确投递,只被目标消费者接收,而不会让不相关的业务系统消费到不必要的消息。
这种架构既能提高系统的扩展性和灵活性,又能很好地将不同业务之间的消息进行隔离,从而保证每个消息只会被相关业务正确处理。

浙公网安备 33010602011771号