计算机系统应用教程网站

网站首页 > 技术文章 正文

「服务器」RabbitMQ入门教程——简介及工作原理

btikc 2024-09-24 08:34:12 技术文章 40 ℃ 0 评论

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

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是购物的狂欢节,这一天各大电商平台订单暴增。一般在用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口来减少库存。如下:

这种做法有如下缺点:

  1. 当库存系统出现故障时,订单就会失败。

  2. 订单系统和库存系统高耦合.。

如果引入RabbitMQ,那么我们可以这样做:

  • 订单系统:用户下单后,订单系统完成持久化处理,,将消息写入消息队列,返回用户订单下单成功。

  • 库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失。

如下:

3、流量销峰

流量削峰一般在秒杀活动中应用广泛 。秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。 其作用如下:

  1. 可以控制活动人数,超过此一定阀值的订单直接丢弃

  2. 可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

如下:

用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面.。秒杀业务根据消息队列中的请求信息,再做后续处理。

基础概念

ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。

  1. Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。

  2. ConnectionFactory为Connection的制造工厂。

  3. Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。


本文转自互联网,如侵犯你的权益,请及时告知。

参考地址:http://blog.csdn.net/whoamiyang/article/details/54954780

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表