4

RabbitMQ原理和架构图解(附6大工作模式) - mikechen的互联网架构

 1 year ago
source link: https://www.cnblogs.com/mikechenshare/p/16740337.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
rabbitmq-principle-01.png
up-33aa9906c110811a1a36cc912ac17f01736.png

为什么要使用RabbitMQ?

1.解耦

系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦。

2.异步

将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。

3.削峰

并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。

RabbitMQ原理和架构

RabbitMQ的技术架构如下图所示:

rabbitmq-interview-01.png

1.生产者(Publisher)

发消息到RabbitMQ中的(Exchange)交换机上。

2.交换机(Exchange)

和生产者建立连接并接收生产者发来的消息

3.消费者(Consumer)

监听RabbitMQ中的(Queue)队列中的消息

4.队列(Queue)

Exchange将消息发送到指定的Queue中,Queue和消费者进行交互

5.路由(Routes)

交换机转发消息到队列的规则

RabbitMQ的核心概念

1)Broker

Broker,简单来说就是消息队列服务器实体。

2)Exchange

Exchange(消息交换机),它指定消息按什么规则,路由到哪个队列。

3)Queue

Queue(消息队列载体),每个消息都会被投入到一个或多个队列。

4)Binding

Binding(绑定),它的作用就是把exchange和queue按照路由规则绑定起来。

5)Routing Key

Routing Key(路由关键字),exchange根据这个关键字进行消息投递;

6)VHost

vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中);

7)Producer

Producer(消息生产者),就是投递消息的程序;

8)Consumer

Consumer(消息消费者),就是接受消息的程序;

9)Channel

Channel(消息通道),在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

RabbitMQ 的工作模式?

RabbitMQ提供了6种模式:

1、简单模式

rabbitmq-01.png

生产者,一个队列一个或多个消费者,当多个消费者同时监听一个队列时,他们并不能同时消费一条消息,而是随机消费消息,即一个队列中一条消息,只能被一个消费者消费。

2、主题模式(topic)

rabbitmq-05.png

生产者,一个交换机(topicExchange),模糊匹配路由规则,多个队列,多个消费者。

3、订阅与发布模式(fanout)

rabbitmq-03.png

生产者,一个交换机(fanoutExchange),没有路由规则,多个队列,多个消费者。生产者将消息不是直接发送到队列,而是发送到X交换机,然后由交换机发送给两个队列,两个消费者各自监听一个队列,来消费消息。

4、路由模式(direct)

rabbitmq-04.png

生产者,一个交换机(directExchange),路由规则,多个队列,多个消费者。主要根据定义的路由规则决定消息往哪个队列发送。

5、RPC模式

对于RPC请求,客户端发送一条带有两个属性的消息:replyTo,设置为仅为请求创建的匿名独占队列,和correlationId,设置为每个请求的唯一id值。请求被发送到rpc_queue队列。RPC工作进程在队列上等待请求。当一个请求出现时,它执行任务,并使用replyTo字段中的队列将结果发回客户机。客户机在回应消息队列上等待数据。当消息出现时,它检查correlationId属性。如果匹配请求中的值,则向程序返回该响应数据。

6、工作队列

rabbitmq-02.png

注释:默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为循环法。

陈睿|mikechen,10年+大厂架构经验,《BAT架构技术500期》系列文章作者,专注于互联网架构技术。

阅读mikechen的互联网架构更多技术文章合集

Java并发|JVM|MySQL|Spring|Redis|分布式|高并发


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK