1. RabbitMQ简介
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。支持集群 。
支持多种语言,理论上单台MQ服务器支持 12000+ 并发
RabbitMQ有7 种工作模式 ,分别是 "Hello World!" ,Work queues , Publish/Subscribe ,Routing,Topics ,RPC ,Publisher Confirms
可以参考官网查阅:https://www.rabbitmq.com/getstarted.html
其中比较常用的是Work queues (工作队列) , ,Routing(路由模式)

以工作队列模式为例,如图生产者p 产生消息 ,并插入到队列中 ,消费者c1 和 消费者 c2 拿到队列中的消息 并加以处理
一些常见的名词解析:
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
2. 官网 和 学习资料
各语言demo下载: https://www.rabbitmq.com/getstarted.html
服务端安装包下载:https://github.com/rabbitmq/rabbitmq-server/releases
3. 图示原理 和 使用场景
++3.1 比如12306订票系统 :++

12306订单系统充当 生产者, 系统产生大量的订单
然后插入到 RabbitMQ队列中 。
右边 3台短信服务器 充当 消费者 在MQ中 队列 取得订单信息 ,给用户发 "订票成功,单号是xxxxx" 的消息。
以达到削峰填谷的目的。

++3.2 再比如 Publish/Subscribe (发布订阅模式)++

p (生产者)是B 站 的一个 up主 ,他发布了一条新视频
然后通过路由和一定的规则 ,插入到指定的队列中
c1 和 c2 都是他的粉丝 ,然后他们就会收到 "某某某up主发布一个新视频"的消息
4. 为什么要使用MQ ,它有什么优缺点
某些场景 它使系统稳定性更高。
因为它具有 削峰 ,解耦 和 异步的特点
比如 某互联网公司的系统
每天 0:00 到 12:00,A 系统风平浪静,每秒并发请求数量就 50 个。结果每次一到 12:00 ~ 13:00 ,每秒并发请求数量突然会暴增到 5k+ 条。但是系统是直接基于 MySQL 的,大量的请求涌入 MySQL,每秒钟对 MySQL 执行约 5k 条 SQL。
一般的 MySQL,扛到每秒 2k 个请求就差不多了,如果每秒请求到 5k 的话,可能就直接把 MySQL 给打死了,导致系统崩溃,用户也就没法再使用系统了。
但是高峰期一过,到了下午的时候,就成了低峰期,可能也就 1w 的用户同时在网站上操作,每秒中的请求数量可能也就 50 个请求,对整个系统几乎没有任何的压力。
如果使用 MQ,每秒 5k 个请求写入 MQ,A 系统每秒钟最多处理 2k 个请求,因为 MySQL 每秒钟最多处理 2k 个。A 系统从 MQ 中慢慢拉取请求,每秒钟就拉取 2k 个请求,不要超过自己每秒能处理的最大请求数量就 ok,这样下来,哪怕是高峰期的时候,A 系统也绝对不会挂掉。而 MQ 每秒钟 5k 个请求进来,就 2k 个请求出去,结果就导致在中午高峰期(1 个小时),可能有几十万甚至几百万的请求积压在 MQ 中。

这个短暂的高峰期积压是 ok 的,因为高峰期过了之后,每秒钟就 50 个请求进 MQ,但是 A 系统依然会按照每秒 2k 个请求的速度在处理。所以说,只要高峰期一过,A 系统就会快速将积压的消息给解决掉。
虽然接入系统后 系统复杂度高了,还有可能涉及到一致性的问题 ,但是关键时刻,用,还是得用的。
5.参考链接
官网
工作模式:
https://www.rabbitmq.com/getstarted.html
https://ke.qq.com/course/230866?tuin=5788c538&taid=12461388048074194
安装MQ:
https://www.cnblogs.com/jimlau/p/12029985.html
https://blog.csdn.net/nbdclw/article/details/81133454
下载地址: