消息队列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,所以时间很多
消息队列RabbitMQ基础详解

1.2.2 线程池

如下图所示,在订单服务中开启一个线程池,线程不在等待其他线程的结果,可以将同步转换为异步,但是不能解耦合
消息队列RabbitMQ基础详解

1.2.3 用MQ系统

如下图所示,使用消息队列,MQ系统,也可以把同步变为异步:当用户下订单后,MQ系统返回订单id,不在管MQ系统,其实MQ系统在和其他系统交互就和订单服务没有什么影响了
消息队列RabbitMQ基础详解

1.3 解耦合服务

使用MQ服务还可以解除彼此间的耦合
消息队列RabbitMQ基础详解

1.4 流量削锋

互联网的秒杀服务,如果巨大请求量发送到秒杀服务, 可能让服务器瘫痪,这时候用消息队列,接收处理巨大的请求,因为它不处理秒杀请求,所以还要给秒杀服务。这时候可以在消息队列里面设置一个阀值,如果达到某个请求,就不在发送给秒杀服务,而发送给其他服务了
消息队列RabbitMQ基础详解

2 消息队列基础知识

2.1 Provider

消息生产者, 就是投递消息的程序。

2.2 Consumer

消息消费者, 就是接受消息的程序。

2.3 没有使用消息队列时消息传递方式

消息队列RabbitMQ基础详解

2.4 使用消息队列后消息传递方式

消息队列RabbitMQ基础详解

2.5 什么是队列

队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站

2.6 队列里存储了什么

rabbitMQ中, 信息流从你的应用程序出发, 来到Rabbitmq的队列,所有信息可以只存储在一个队列中。 队列可以存储很多信息, 因为它基本上是一个无限制的缓冲区, 前提是你的机器有足够的存储空间。

2.7 队列和应用程序的关系

多个生产者可以将消息发送到同一个队列中, 多个消息者也可以只从同一个队列接收数据