RabbitMQ简介
在介绍RabbitMQ之前实现要介绍一下MQ,MQ是什么?
MQ全称是Message Queue,可以理解为消息队列的意思,简单来说就是消息以管道的方式进行传递。
RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言的。
所以如要使用RabbitMQ则需要Erlang环境和RabbitMQ,官网下载太慢了,这有下载链接ribbitMQ+Erlang下载
作用好处:
1.提高系统响应速度
生产者只需要把自己的消息交给MQ,之后就可以干别的去了,无需等待处理结果。
2.提高系统稳定性(在微服务基础下)
例如电商系统,用户下单给商家,正常情况商家接单,但是如果商家系统宕掉,那么用户下单不成功,那么马爸爸又少挣钱了,你说气人不。所以加入MQ,下单给MQ,就说商家宕机,等商家系统重启后就会接到这条订单。
3.异步化、解耦、消除峰值
异步化:用户注册分别可以发邮件和发短信,不串联
解耦:微服务使用MQ耦合度降低
消除峰值:秒杀出错误页面
举例
看不懂吧,来说点人话,其实RabbitMQ就是个中介,
比如,你名下有一套1000平米的房子(那你肯定不会看到这篇文章)要卖,你会怎么办呢?
1.你会找一个地产中介,告诉中介你要卖一套1000平米的房子,卖2亿,中介好的包您满意;
2.中介接到你要卖房的消息,在会他们系统发布消息,“有人卖房了,1000平米,3亿”(真黑啊!!!!)
3.有个土豪正好想买房,然后他每天都在关注这个房地产的信息,突然看到中介有一条信息,他就看了看,然后觉得太贵了,再等等。
或者好多人都在关注这个房地产的信息,都看到了这条卖房信息,都觉得挺贵的。
所以RabbtiMQ就是那个中介(当然还是比较良心的)
其中,这里面就隐含了几个RabbitMQ的概念。
RabbitMQ的重要概念
生产者(Producer)-------卖房的人:发送消息的应用。
消费者(Consumer)------关注中介的信息的人:接收消息的应用。
队列(Queue)------中介的系统:存储消息的缓存。
消息(Message)-------房的信息:由生产者通过RabbitMQ发送给消费者的信息。
连接(Connection)--------卖房人的电话:连接RabbitMQ和应用服务器的TCP连接。
通道(Channel)------得知消息的媒介(手机、电脑):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
交换机(Exchange)-------中介(客户经理):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须到绑定一个交换机。
绑定(Binding)-----客户经理在中介系统发布信息-:绑定是队列和交换机的一个关联连接。
路由键(Routing Key)------消费者关注的不同的中介信息渠道:路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。
RabbitMQ使用场景
1.在秒杀场景中,对于在同一时刻访问量太多,用MQ去做削峰,也就是到了一定的值之后直接跳转到友好的错误页面,之前的数据去MQ排队去,例如饥饿营销玩的很好的小米
2.订阅机制,对于多人监听一个服务来获取关注的消息,类似订阅号,或者公众号
3.注册用户,注册后需要分别发邮件和短信
通讯图
RabbitMQ核心
我们从上面的例子可以看到,其实在这里有三个角色:生产者(卖房人)、消费者(关注中介消息的人)、MQ(中介,其中包含了各种功能)
生产者只需要告诉MQ,我要卖房,价格是多少,就可以全权交个MQ,然后可能去干别的了,例如去买块地,不用等着看谁买
消费者只需要订阅MQ的消息,就能知道有谁要卖房,价格是多少
MQ其中包含了众多的功能,用来支撑消息的传递。
所以我们看到,MQ也就是这个中介才是关键所在。
那么中介里面是才是这个中介的核心力量呢?老板还是员工?答案当然是员工了,就是上面说的客户经理,没有众多的客户经理谁给老板收集信息,谁给老板踩盘(中介专业术语),所有员工才是核心,也就是MQ里面的交换机(Exchange)
现在我们说下这个Exchang是个什么玩意?能干什么?我们来看下一篇文章