乐趣区

关于java:RabbitMQ-原理和架构图解-附-6-大工作模式

为什么要应用 RabbitMQ?

1. 解耦

零碎 A 在代码中间接调用零碎 B 和零碎 C 的代码,如果未来 D 零碎接入,零碎 A 还须要批改代码,过于麻烦。

2. 异步

将音讯写入音讯队列,非必要的业务逻辑以异步的形式运行,放慢响应速度。

3. 削峰

并发量大的时候,所有的申请间接怼到数据库,造成数据库连贯异样。

关注「mikechen 的互联网架构」公众号,回复 【架构】 支付《Java 进阶架构思维导图 &Java 进阶架构文章合集》

RabbitMQ 原理和架构

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

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、简略模式

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

2、主题模式(topic)

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

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

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

4、路由模式(direct)

生产者,一个交换机(directExchange),路由规定,多个队列,多个消费者。次要依据定义的路由规定决定音讯往哪个队列发送。

5、RPC 模式

对于 RPC 申请,客户端发送一条带有两个属性的音讯:replyTo, 设置为仅为申请创立的匿名独占队列,和 correlationId, 设置为每个申请的惟一 id 值。申请被发送到 rpc_queue 队列。RPC 工作过程在队列上期待申请。当一个申请呈现时,它执行工作,并应用 replyTo 字段中的队列将后果发回客户机。客户机在回应音讯队列上期待数据。当音讯呈现时,它查看 correlationId 属性。如果匹配申请中的值,则向程序返回该响应数据。

6、工作队列

正文:默认状况下,RabbitMQ 将按程序将每条音讯发送给下一个消费者,均匀而言,每个消费者将取得雷同数量的音讯,这种散发音讯的形式称为循环法。

以上

作者简介

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

浏览 mikechen 的互联网架构更多技术文章合集

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

关注「mikechen 的互联网架构」公众号,回复 【架构】 支付《Java 进阶架构思维导图 &Java 进阶架构文章合集》

退出移动版