RabbitMQ
Last Update:
工作流程
1 |
|
1 |
|
RabbitMQ Broker: 消息中间件的服务节点
信息交换机类型
- 定义
- 优缺点
- 适用场景
- 如何应用
Fanout(扇形)交换机
就像交换机一样, 广播消息
- 将所有信息绑定到消息队列
- 与该交互机绑定的, 都会收到其交货机的广播消息
定义
Fanout 交换机将消息广播到与其绑定的所有队列。无视消息的路由键,适合广播消息的场景。
优缺点
优点
可以将消息广播到所有与之绑定的队列,适用于需要广播消息的场景,比如日志系统、发布订阅系统等
缺点
不能进行精确的路由控制,不适用于需要特定路由规则的场景
适用场景
举例:
例如,在一个多播聊天室中,当一个用户发送一条消息时,所有其他用户都应该接收到这条消息。在这种情况下,可以使用 Fanout 交换机将消息广播到所有与之绑定的队列中
Topic(主题)交换机
定义
Topic 交换机根据消息的路由键将消息路由到与之匹配的队列中。路由键可以使用通配符进行匹配,适合处理一对多的消息发送场景。
优缺点
- 优点
可以根据消息的路由键进行精确的路由控制,只将消息发送到与之完全匹配的队列中,适用于需要一对一的消息发送场景
- 缺点
路由键只能使用固定的字符串,不支持通配符匹配
适用场景
举例:
例如,在一个电商系统中,当一个用户购买一件商品时,需要根据商品的类别和品牌将订单信息发送到特定的队列中,以便相关的部门进行处理。在这种情况下,可以使用 Topic 交换机根据商品的类别和品牌进行多重路由控制,将订单消息发送到特定的队列中
Direct(直连)交换机
定义
Direct 交换机根据消息的路由键将消息路由到与之完全匹配的队列中。适合处理一对一的消息发送场景
优缺点
- 优点
支持通配符匹配路由键,可以根据消息的路由键将消息路由到多个队列中,适用于需要一对多的消息发送场景
- 缺点
相比直连交换机,Topic 交换机在处理消息时需要进行额外的匹配操作,处理效率略低
适用场景
举例:
例如,在一个订单系统中,当一个订单创建时,需要将订单信息发送到一个特定的队列中,以便其他系统可以及时地处理这个订单。在这种情况下,可以使用 Direct 交换机根据订单号进行路由控制,将订单消息发送到特定的队列中
路由键
在 RabbitMQ 中,路由键是一个字符串,用于描述消息的路由信息。生产者在发送消息时可以指定路由键,消费者在绑定队列时也可以指定路由键。
路由键与交换机的绑定方式不同,对于 Fanout 交换机来说,路由键会被忽略,消息会被广播到所有绑定到交换机上的队列中;对于 Direct 交换机和 Topic 交换机来说,路由键决定了消息被路由到哪个队列中。
在 Direct 交换机和 Topic 交换机中,队列和交换机之间的绑定都是带有一个路由键的,当生产者发送消息时,需要指定消息的路由键,交换机会根据路由键将消息发送到对应的队列中。
在 Topic 交换机中,路由键可以使用通配符来进行匹配。通配符有两种,分别是 *(匹配一个单词)和 #(匹配零个或多个单词),可以使用它们来实现更加灵活的路由控制。
sg.#
sg.slx
sg.xh