🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇
⭐ RabbitMQ ⭐
🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇
RabbitMQ 7种工作模式
RabbitMQ 是一个广泛使用的开源消息代理和队列服务器,支持多种消息传递模式。以下是RabbitMQ提供的7种主要的工作模式及其应用场景的详细介绍。
1. Simple(简单模式)
角色:
- P (Producer): 生产者,负责发送消息。
- C (Consumer): 消费者,负责接收消息。
- Queue (消息队列): 类似于邮箱,可以缓存消息;生产者向其中投递消息,消费者从中取出消息。
特点:一个生产者,一个消费者,消息只能被消费一次。也称为点对点 (Point-to-Point) 模式。
适用场景:消息只能被单个消费者处理的情况。
2. Work Queue(工作队列)
角色:
- P (Producer): 生产者。
- C1, C2 (Consumers): 多个消费者。
- Queue (消息队列): 用于缓存消息。
特点:一个生产者,多个消费者。在多个消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息。
适用场景:集群环境中做异步处理。例如,12306 短信通知服务,订单成功后,订单消息会被发送到 RabbitMQ,短信服务从 RabbitMQ 中获取订单信息,并发送通知信息。
3. Publish/Subscribe(发布/订阅)
角色:
特点:生产者将消息发送到 Ex
- P (Producer): 生产者。
- X (Exchange, 交换机): 负责将消息按一定规则路由到一个或多个队列。
- C1, C2 (Consumers): 多个消费者。
- Queue (消息队列): 用于缓存消息。
概念介绍
Exchange: 交换机 (X).
作⽤: ⽣产者将消息发送到Exchange, 由交换机将消息按⼀定规则路由到⼀个或多个队列中(上图中⽣产 者将消息投递到队列中, 实际上这个在RabbitMQ中不会发⽣. )
RabbitMQ交换机有四种类型: fanout,direct, topic, headers, 不同类型有着不同的路由策略.
AMQP协 议⾥还有另外两种类型, System和⾃定义, 此处不再描述.
- Fanout:⼴播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式)
- Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
- Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式)
- headers类型的交换器不依赖于路由键的匹配规则来路由消息, ⽽是根据发送的消息内容中的
headers属性进⾏匹配. headers类型的交换器性能会很差,⽽且也不实⽤,基本上不会看到它的存在.
Exchange(交换机)只负责转发消息, 不具备存储消息的能⼒, 因此如果没有任何队 Exchange绑定,或者没有符合路由规则的队列,那么消息就会丢失
RoutingKey: 路由键.⽣产者将消息发给交换器时, 指定的⼀个字符串, ⽤来告诉交换机应该如何处理这个消息.
Binding Key:绑定. RabbitMQ中通过Binding(绑定)将交换器与队列关联起来, 在绑定的时候⼀般会指 定⼀个Binding Key, 这样RabbitMQ就知道如何正确地将消息路由到队列了.
change,由交换机将消息广播到所有绑定的队列。每个消费者都会接收到相同的消息。
⽐如下图: 如果在发送消息时, 设置了RoutingKey 为orange, 消息就会路由到Q1
当消息的Routing key与队列绑定的Bindingkey相匹配时,消息才会被路由到这个队列.
BindingKey其实也属于路由键中的⼀种, 官⽅解释为:the routingkey to use for the binding.
可以翻译为:在绑定的时候使⽤的路由键. ⼤多数时候,包括官⽅⽂档和RabbitMQJava API 中都把
BindingKey和RoutingKey看作RoutingKey, 为了避免混淆,可以这么理解:
- 在使⽤绑定的时候,需要的路由键是BindingKey.
- 在发送消息的时候,需要的路由键是RoutingKey
适用场景:消息需要被多个消费者同时接收的场景。例如,中国气象局发布天气预报的消息,新浪、百度、搜狐等门户网站通过队列绑定到该交换机,自动获取气象局推送的气象数据。
4. Routing(路由模式)
角色:
- P (Producer): 生产者。
- X (Exchange, 交换机): 根据 RoutingKey 的规则将消息路由到对应的队列。
- C1, C2 (Consumers): 多个消费者。
- Queue (消息队列): 用于缓存消息。
特点:交换机根据 RoutingKey 将消息筛选后发给对应的消费者队列。
适用场景:需要根据特定规则分发消息的场景。例如,系统打印日志,日志等级分为 error, warning, info, debug,可以通过这种模式将不同的日志发送到不同的队列,最终输出到不同的文件。
5. Topics(通配符模式)
角色:
- P (Producer): 生产者。
- X (Exchange, 交换机): 根据 RoutingKey 的通配符匹配规则将消息路由到对应的队列。
- C1, C2 (Consumers): 多个消费者。
- Queue (消息队列): 用于缓存消息。
特点:类似于 Routing 模式,但使用通配符来定义 RoutingKey 的模式,使得匹配更加灵活。
适用场景:需要灵活匹配和过滤消息的场景。
示例图:展示交换机根据通配符匹配规则将消息路由到不同的队列。
6. RPC (Remote Procedure Call, 远程过程调用)
角色:
- 客户端 (Client): 发送请求消息并等待响应。
- 服务端 (Server): 接收请求消息并发送响应消息。
特点:客户端发送消息到指定的队列,并设置 replyTo 字段指定回调队列。服务端处理请求并发送响应消息到回调队列。客户端在回调队列上等待响应消息,并检查 correlationId 属性以确保它是所期望的响应。
适用场景:需要实现远程调用的过程,例如微服务间的通信。
7. Publisher Confirms(发布确认)
角色:
- P (Producer): 生产者。
- RabbitMQ Server: 消息服务器.
特点:生产者将 Channel 设置为 confirm 模式,发布的每一条消息都会获得一个唯一的 ID。当消息被 RabbitMQ 服务器接收并处理后,服务器会异步地向生产者发送一个确认 (ACK),表明消息已经送达。
适用场景:对数据安全性要求较高的场景,例如金融交易、订单处理。
以上就是RabbitMQ 的七种工作模式,后续会介绍这些工作模式的具体代码实现。感谢阅览!!