2、了解 RabbitMQ
什么是 RabbitMQ
RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol)高级消息队列协议 的消息中间件,最初起源于金融系统,用于在 分布式系统中存储转发消息。
RabbitMQ 的优点
RabbitMQ 具有:可靠性、灵活的路由、扩展性、高可用性、多种协议、多语言客户端支持、管理界面、插件机制。
- 可靠性:使用一些机制保证可靠笥。如持久化、传输确认、发布确认
- 灵活的路由:在消息进入队列之前,通过
交换器
来路由
消息 - 扩展性:多个 RabbitMQ 节点可以组成集群,还可以动态扩展集群节点
- 高可用:队列可以在集群中的机器上设置镜像,当部分节点出现故障时,队列仍然可用
- 多种协议:原生支持 AMQP 协议,还支持 STOMP、MQTT
- 多语言客户端,如支持 PHP、Ruby 等
- 管理界面:提供了易用的后台管理界面
- 插件机制:提供了许多插件支持
RabbitMQ 架构
该图是 RabbitMQ 的架构图,展示了生产者
如何通过通道
、连接
、和虚拟机
与 RabbitMQ 服务器交互的过程。同时,也展示了交换机
、绑定
和队列
如休协同工作以实现消息的路由
和存储
。
- Producer(生产者):发送消息到 RabbitMQ 的应用程序或服务
- Connection(连接):表示生产者或消费者与 RabbitMQ 服务器之间的一个 TCP 连接
- Virtual Host(虚拟主机):消息队列服务器实体
- Broker(RabbitMQ 服务):消息存储和管理的中心
- Exchange(交换机机):交换机,用于接收生产者发送的消息,并将其路由到相应的队列
- Binding(绑定):绑定,定义了交换机和队列之间的关系。当生产者发送消息到交换机时,会根据绑定规则将消息路由到相应的队列
- Queue(队列):队列,存储消息的地方。消费者从队列中获取并消费消息
- Consumer(消费者): 通常指的是从RabbitMQ服务器接收消息的应用程序或服务。
再来说一下 Broker
:
- Broker 表示 RabbitMQ 服务,每个 Broker 中至少有一个 Virtual host 虚拟主机
- 每个 Virtual host 中有自己的 交换机、队列,交换机与队列通过 Binding
这些也是 RabbitMQ 核心概念,既然理解含义又要记住它。
交换机与类型
服务器发送消息不会直接发送到队列
中,只能将消息
发送给交换机
,RabbitMQ 根据确定的规则,把消息投递到对应的队列中,这些规则称为路由键
,队列通过路由键绑定到交换机上。
交换机的主要工作是接收来自生产者的消息,然后将消息推入到队列。交换机必须知道如何处理收到的消息,是把消息放入对应的队列还是把消息丢弃,这些都有交换机确定。
交换机的类型有:
Name(交换机类型) | Default pre-declared names |
---|---|
Direct exchange(直连交换机) | (Empty string) and amq.direct |
Fanout exchange(扇型交换机) | amq.fanout |
Topic exchange(主题交换机) | amq.topic |
Headers exchange(头交换机) | amq.match (and amq.headers in RabbitMQ) |
- 直连交换机:将消息路由到那些 BindingKey 和 RoutingKey 完全匹配的队列中,这是默认的交换器模式,适用于简单的一对一消息传递场景
- 扇型交换机:将所有发送到该交换机的消息路由到所有绑定的队列,而不考虑路由键。适用于广播消息,比如实时消息分发等场景
- 主题交换机:路由规则更加灵活,可以根据路由键和绑定键的模式进行匹配。这种类型支持更复杂的匹配规则,适用于需要根据多个标准进行消息分发的场景
- 头交换机:根据消息头部的属性进行路由。用于需要根据消息内容以外的元数据进行路由的场景
请登录后再评论