为什么要应用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进阶架构文章合集》