目录
2.3、发布/订阅模式(Publish/Subscribe Mode)
RabbitMQ 是一个基于 AMQP(高级消息队列协议)的开源的消息代理。
1、特点
- 支持多种协议(AMQP, MQTT, STOMP等)。
- 强大的消息路由功能。
- 支持事务和确认机制,保证消息传递的可靠性。
- 提供丰富的管理界面和监控功能。
2、RabbitMQ的消息传递模式
2.1、简单模式(Simple Mode)
P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。适用于简单的点对点通信场景
- 每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中
- 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行它不会影响到消息被发送到队列
- 接收者在成功接收消息之后需向队列应答成功
- 如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式
2.2、工作队列模式(Work Queue Mode)
适用于需要并行处理任务的场景,如图像处理、数据计算等。
特点:
允许多个消费者从同一个队列中接收消息。这种模式通过在消费者之间分配任务来提高消息处理的效率。
2.3、发布/订阅模式(Publish/Subscribe Mode)
P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。适用于需要消息广播的场景,例如新闻更新、日志记录等。
特点:
- 每个消息可以有多个消费者发布者和订阅者之间有时间上的依赖性。
- 针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
- 为了消费消息,订阅者必须保持运行的状态
- 如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型
2.4、路由模式(Routing Mode)
适用于需要根据特定条件或规则将消息路由到不同处理者的场景。
特点:
生产者将消息发送到交换机,交换机根据消息的路由键(Routing Key)将消息发送到特定的队列。消费者监听这些队列以接收消息。
3、RabbitMQ集群
3.1、RabbitMQ部署和集群配置的三种模式
1、单机模式。
2、普通模式(默认的集群模式)。
3、镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适合)。要实现镜像模式,需要先搭建出普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。
3.2、RabbitMQ集群的基本概念
在 RabbitMQ 集群中,所有节点都会同步元数据,包括队列、交换器、绑定和 vhost 的定义。这意味着无论在哪个节点上创建或修改这些资源,其他节点都会自动更新。
3.2.1、节点类型
磁盘节点:默认的节点类型,将元数据(包括队列、交换器、绑定和 vhost 的定义)存储在磁盘上。集群中至少需要一个磁盘节点来持久化元数据。
内存节点:将元数据存储在内存中,不提供持久化。通常用于提高性能,但重启后元数据会丢失。
内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存数据就足够了
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。
3.2.2、核心组件
Broker:消息队列服务器实体
ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用;
Exchange(交换器):用于接受、分配消息;