RabbitMQ是一个开源的AMQP实现,做事器端用Erlang措辞编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发,在易用性、扩展性、高可用性等方面表现不俗。在RabbitMQ中有三个主要的部分,即:生产者、行列步队、消费者。
简介1、生产者
生产者便是发送的程序,它的紧张任务便是发送到行列步队。

2、行列步队
行列步队(queue)便是存放的位置,它的紧张浸染便是存储、转发。通过你的运用程序和 RabbitMQ 进行传输,它们能够只存储在一个行列步队(queue)中。 行列步队(queue)没有任何限定,你要存储多少都可以——基本上是一个无限的缓冲。多个生产者(producers)能够把发送给同一个行列步队,同样,多个消费者(consumers)也能够从同一个行列步队(queue)中获取数据。
3、消费者
消费者便是就收的程序,它的紧张任务是获取消息。
如下示意图表示了RabbitMQ的事情流程:P代表生产者、C代表消费者、中间的赤色部分代表行列步队。
把稳:生产者、行列步队、消费者三个部分可以存在于三个做事器中,实际上对付大型的行列步队系统,这三个部分常日是支配在三个不同的地方的。
运用处景RabbitMQ虽然是一个代理系统,但它的浸染并不仅仅局限于发送,实际上RabbitMQ的常见运用有很多:
1、异步处理
我知道注册是很常见的功能,常日在用户注册后,须要发注册邮件和注册短信。传统的做法有两种:1、串行的办法;2.并行的办法。
串行办法便是用户须要等待注册信息添加到数据库,邮件和短信发送成功后,才可以收到相应。如下:
并行办法便是将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,才将相应返回给用户。如下:
以上两种办法虽然可以完成注册,但都比较耗时。那么,RabbitMQ如何办理这个问题呢?
利用RabbitMQ,引入行列步队后,把发送邮件和发送短信等不是必须的业务逻辑进行异步处理,即待注册信息添加到数据库之后就立马返回相应。如下:
从图中可以看出,此种方案耗时相对付前两种方案,要少很多。
2、运用解耦
双11是购物的狂欢节,这一天各大电商平台订单暴增。一样平常在用户下单后,订单系统须要关照库存系统,传统的做法便是订单系统调用库存系统的接口来减少库存。如下:
这种做法有如下缺陷:
当库存系统涌现故障时,订单就会失落败。
订单系统和库存系统高耦合.。
如果引入RabbitMQ,那么我们可以这样做:
订单系统:用户下单后,订单系统完成持久化处理,,将写入行列步队,返回用户订单下单成功。
库存系统:订阅下单的,获取下单,进行库操作。 就算库存系统涌现故障,行列步队也能担保的可靠投递,不会导致丢失。
如下:
3、流量销峰
流量削峰一样平常在秒杀活动中运用广泛 。秒杀活动,一样平常会由于流量过大,导致运用挂掉,为理解决这个问题,一样平常在运用前端加入行列步队。 其浸染如下:
可以掌握活动人数,超过此一定阀值的订单直接丢弃
可以缓解短韶光的高流量压垮运用(运用程序按自己的最大处理能力获取订单)
如下:
用户的要求,做事器收到之后,首先写入行列步队,加入行列步队长度超过最大值,则直接抛弃用户要求或跳转到缺点页面.。秒杀业务根据行列步队中的要求信息,再做后续处理。
根本观点ConnectionFactory、Connection、Channel都是RabbitMQ对外供应的API中最基本的工具。
Connection是RabbitMQ的socket链接,它封装了socket协议干系部分逻辑。
ConnectionFactory为Connection的制造工厂。
Channel是我们与RabbitMQ打交道的最主要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布等。
本文转自互联网,如陵犯你的权柄,请及时奉告。
参考地址:http://blog.csdn.net/whoamiyang/article/details/54954780