RabbitMQ架构详解(7大架构原理模型图解)

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

RabbitMQ定义

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

RabbitMQ是一款使用Erlang语言开发的,实现了高级消息队列协议(AMQP)的开源消息中间件。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。

Erlang语言,主要用于并发及分布式系统的开发,在电信领域应用广泛,OTP作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库。

 

RabbitMQ的特点

1.可靠性:RabbitMQ使用一些机制来保证可靠性, 如持久化、传输确认及发布确认等。

2.灵活的路由 :在消息进入队列之前,通过交换器来路由消息。

3.扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展 集群中节点。

4.高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队 列仍然可用。

5.多种协议:RabbitMQ除了原生支持AMQP协议,还支持STOMP, MQTT等多种消息 中间件协议。

6.多语言客户端:RabbitMQ 几乎支持所有常用语言,比如 Java、 Python、 Ruby、 PHP、 C#、 JavaScript 等。

 

RabbitMQ架构设计

RabbitMQ架构,如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

RabbitMQ架构会涉及如下模型:Producer、Consumer、Queue、Exchange、Broker、RoutingKey、BindingKey。

 

RabbitMQ架构模型

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

1.Producer

消息生产者Producer:主要就是生成消息,通过信道(Channel),把消息发送给交换机(Exchange)。

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

消息一般可以包含 2 个部分:

  1. 消息体(payload):一般是一个带有业务逻辑结构的数据,比如:一个 JSON 字符串;
  2. 标签(Label):用来表述这条消息,比如:一个交换器的名称和一个路由键;

 

2.Consumer

这个大家也比较清楚,就是消息消费者,就是接受消息的程序。

消费者监听RabbitMQ中的(Queue)队列中的消息,然后去消费。

备注:消息(Message)会一直留在队列里,直到被消费者(Consumer)消费。

 

3.Queue

用于存储消息,如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。

RabbitMQ中消息都只能存储在队列中,这一点和Kafka这种消息中间件相反。

多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

 

4.Exchange

生产者将消息发送到Exchange,由交换器将消息路由到一个或者多个队列中。

如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

这里的交互机会涉及如下四种类型:

  1. 直接Direct;
  2. 扇出Fanout ;
  3. 主题Topic ;
  4. 消息头Headers;

不同的类型有着不同的路由策略。

 

5.Broker

可以将一个RabbitMQ Broker看作一台RabbitMQ服务器,如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

上图展示了消息从生产者存入RabbitMQ Broker,以及消费者从Broker中消费数据的完整过程。

 

 

6.Routing Key

生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则。

如下图所示:

RabbitMQ架构详解(7大架构原理模型图解)-mikechen

生产者可以在发送消息给交换器时,通过指定 RoutingKey 来决定消息流向哪里。

 

7.BindingKey

RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样 RabbitMQ 就知道如何正确地将消息路由到队列了。

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法