编辑
2023-11-28
RabbitMQ
00
请注意,本文编写于 528 天前,最后修改于 528 天前,其中某些信息可能已经过时。

目录

1. AMQP协议
1.1 Module Layer
1.2 Session Layer
1.3 Transport Layer
2. RabbitMQ的特性
2.1 可靠性(Reliability)
2.2 灵活的路由(Flexible Routing)
2.3 消息集群(Clustering)
2.4 高可用性(Highly Available Queues)
2.5 多种协议(Multi-protocol)
2.6 多语言客户端(Many Clients)
2.7 管理界面(Management UI)
2.8 插件机制(Plugin System)
3. RabbitMQ的工作模型
3.1 Broker
3.2 Exchange
3.3 Queue
3.4 Binding
3.5 Routing Key
3.6 Producer
1. AMQP协议
2. RabbitMQ的特性
3. RabbitMQ的工作模型
4. RabbitMQ的底层架构

RabbitMQ是一种基于AMQP(Advanced Message Queueing Protocol)协议实现的消息队列中间件。它使用Erlang语言开发,并具有强大的功能和高并发性能。下面将详细介绍RabbitMQ的基本原理和底层架构。

1. AMQP协议

AMQP(Advanced Message Queueing Protocol)是一种开放标准的高级消息队列协议,用于提供统一的消息服务。RabbitMQ是AMQP协议的一种实现。AMQP协议由三个部分组成:

1.1 Module Layer

位于协议的最高层,定义了供客户端调用的命令,客户端可以利用这些命令实现自定义的业务逻辑。

1.2 Session Layer

位于中间层,负责将客户端的命令发送给服务端,并将服务端的应答返回给客户端。它提供可靠性的同步机制和错误处理,确保客户端与服务器之间的通信可靠性。

1.3 Transport Layer

位于最底层,主要负责传输二进制数据流,提供帧的处理、信道的复用、错误检查和数据表示等功能。

2. RabbitMQ的特性

RabbitMQ具有以下特性:

2.1 可靠性(Reliability)

RabbitMQ通过持久化、传输确认和发布确认等机制来保证消息的可靠性。

2.2 灵活的路由(Flexible Routing)

RabbitMQ使用Exchange来路由消息,可以根据不同的规则将消息路由到指定的队列。

2.3 消息集群(Clustering)

多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker,提供高可用性和负载均衡的支持。

2.4 高可用性(Highly Available Queues)

队列可以在集群中的多个节点上进行镜像,即使部分节点出现问题,队列仍然可用。

2.5 多种协议(Multi-protocol)

RabbitMQ支持多种消息队列协议,如AMQP、STOMP、MQTT等。

2.6 多语言客户端(Many Clients)

RabbitMQ几乎支持所有常用的编程语言,如Java、.NET、Ruby、PHP、C#、JavaScript等。

2.7 管理界面(Management UI)

RabbitMQ提供了一个易用的用户界面,用于监控和管理消息和集群中的节点。

2.8 插件机制(Plugin System)

RabbitMQ提供了许多插件,可以实现从多个方面的扩展,也可以编写自己的插件。

3. RabbitMQ的工作模型

RabbitMQ的工作模型涉及以下几个重要概念:

3.1 Broker

即RabbitMQ的实体服务器,提供消息传输服务,维护生产者到消费者的传输线路,确保消息按照指定的方式传输。

3.2 Exchange

消息交换机,用于指定消息按照什么规则路由到哪个队列。RabbitMQ提供了多种类型的交换机,如直连交换机(Direct Exchange)和主题交换机(Topic Exchange)等。

3.3 Queue

消息队列,是消息的载体,每条消息都会被投送到一个或多个队列中。

3.4 Binding

绑定,将Exchange和Queue按照某种路由规则绑定起来。

3.5 Routing Key

路由关键字,Exchange根据Routing Key进行消息投递。在绑定时指定的关键字称为Binding Key。

3.6 Producer

消息生产者,将消息投递RabbitMQ是一种基于AMQP(Advanced Message Queueing Protocol)协议实现的消息队列中间件。它使用Erlang语言开发,并具有强大的功能和高并发性能。下面将详细介绍RabbitMQ的基本原理和底层架构。

1. AMQP协议

AMQP(Advanced Message Queueing Protocol)是一种应用层标准的高级消息队列协议,用于提供统一的消息服务。RabbitMQ是基于AMQP协议实现的,它允许客户端和消息中间件之间传递消息,并且不受开发语言等条件的限制[1]

AMQP协议包含三个层次:

  • Module Layer:提供供客户端调用的命令,用于实现自定义的业务逻辑。
  • Session Layer:负责客户端与服务器之间的通信,提供可靠性的同步机制和错误处理。
  • Transport Layer:传输二进制数据流,提供帧的处理、信道的复用、错误检查等功能。

2. RabbitMQ的特性

RabbitMQ具有以下特性:

  • 可靠性(Reliability):通过持久化、传输确认和发布确认等机制来保证消息的可靠性。
  • 灵活的路由(Flexible Routing):使用Exchange来路由消息,可以根据规则将消息发送到指定的队列。
  • 消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 高可用(Highly Available Queues):队列可以在集群中的多个机器上进行镜像,即使部分节点出现问题,队列仍然可用。
  • 多种协议(Multi-protocol):支持多种消息队列协议,如AMQP、STOMP、MQTT等。
  • 多语言客户端(Many Clients):几乎支持所有常用的编程语言。
  • 管理界面(Management UI):提供易用的用户界面,用于监控和管理消息和集群中的节点。
  • 插件机制(Plugin System):提供了许多插件,可以扩展功能或编写自己的插件[1]

3. RabbitMQ的工作模型

RabbitMQ的工作模型涉及以下几个概念:

  • Broker:RabbitMQ的实体服务器,负责维护消息的传输线路。
  • Exchange:消息交换机,用于指定消息的路由规则。
  • Queue:消息队列,用于存储消息的载体。
  • Binding:将Exchange和Queue按照路由规则绑定起来。
  • Routing Key:用于Exchange根据路由规则进行消息投递的关键字。
  • Vhost:虚拟主机,用于实现不同用户的权限分离。
  • Producer:消息生产者,将消息投递到Exchange上。
  • Consumer:消息消费者,接收并处理消息。
  • Connection:Producer和Consumer与Broker之间的TCP长连接。
  • Channel:消息通道,用于建立会话任务,一个连接可以有多个Channel[1]

4. RabbitMQ的底层架构

RabbitMQ的底层架构主要由以下几个组件组成:

  • AMQP协议处理器:负责处理AMQP协议的解析和编码。
  • Connection Manager:管理与客户端的连接,包括连接的建立、关闭和错误处理。
  • Channel Manager:管理Channel的创建、关闭和复用。
  • Message Store:存储消息的持久化和恢复。
  • Queue Engine:处理消息的路由和存储,包括消息的投递和消费。
  • Exchange Engine:根据Exchange的类型和路由规则,将消息发送到对应的Queue。
  • Consumer Dispatcher:将消息分发给消费者进行处理。

Learn more:

  1. 消息中间件架构体系 - 深究 “RabbitMQ” 及其 底层原理! - 掘金
  2. 消息中间件架构体系 - 深究“RabbitMQ”及其 底层原理 - 知乎
  3. 彻底理解RabbitMQ底层原理-CSDN博客

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!