消息队列RabbitMQ基础详解
文章目录
1 为什么要使用RabbitMQ
1.1 RabbitMQ基础
AMQP
,即Advanced Message Queuing Protocol
,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
消息中间件主要用于组件之间的解耦
,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP
的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ
是一个开源的AMQP
实现,服务器端用Erlang
语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP
等,支持AJAX
。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
1.2 同步变异步
1.2.1 逐一流程
下图所示的是,流程是依次发送的,即:下订单->订单服务->发短信->发email->发push,所以时间很多
1.2.2 线程池
如下图所示,在订单服务中开启一个线程池,线程不在等待其他线程的结果,可以将同步转换为异步,但是不能解耦合
1.2.3 用MQ系统
如下图所示,使用消息队列,MQ
系统,也可以把同步变为异步:当用户下订单后,MQ
系统返回订单id,不在管MQ
系统,其实MQ
系统在和其他系统交互就和订单服务没有什么影响了
1.3 解耦合服务
使用MQ服务还可以解除彼此间的耦合
1.4 流量削锋
互联网的秒杀服务,如果巨大请求量发送到秒杀服务, 可能让服务器瘫痪,这时候用消息队列,接收处理巨大的请求,因为它不处理秒杀请求,所以还要给秒杀服务。这时候可以在消息队列里面设置一个阀值,如果达到某个请求,就不在发送给秒杀服务,而发送给其他服务了
2 消息队列基础知识
2.1 Provider
消息生产者, 就是投递消息的程序。
2.2 Consumer
消息消费者, 就是接受消息的程序。
2.3 没有使用消息队列时消息传递方式
2.4 使用消息队列后消息传递方式
2.5 什么是队列
队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站
2.6 队列里存储了什么
在rabbitMQ
中, 信息流从你的应用程序出发, 来到Rabbitmq
的队列,所有信息可以只存储在一个队列中。 队列可以存储很多信息, 因为它基本上是一个无限制的缓冲区, 前提是你的机器有足够的存储空间。
2.7 队列和应用程序的关系
多个生产者可以将消息发送到同一个队列中, 多个消息者也可以只从同一个队列接收数据