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