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 队列和应用程序的关系

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

相关文章: