在了解什么是RabbitMQ之前有必要先说说amqp
AMQP
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 它可以使对应的客户端(client)与对应的消息中间件(broker)进行交互。消息中间件从发布者(publisher)那里收到消息(发布消息的应用,也称为producer),然后将他们转发给消费者(consumers,处理消息的应用)。由于AMQP是一个网络协议,所以发布者、消费者以及消息中间件可以部署到不同的物理机器上面。在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准,
RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。AMQP的实现还有ActiveMQ、Kafka、RocketMQ等。RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。
我们假设你需要实现一个用户注册功能,注册成功之后需要向用户发送邮件、发送短信、存日志记录。你很可能会采用如下方式
但是渐渐的你发现,注册功能好像太慢了,毕竟一个注册要调用发短信系统,发邮件系统,存日志系统,这些都是很耗时的,你在想,我能不能异步去做这些事情呢?于是你采用了如下的方案
现在注册功能快多了,你觉得很开心,但是随着公司的用户数提升,你开始渐渐的发现问题了。一个注册功能就要启动三个线程,而我们知道一台服务器的线程数是有上限的,线程上限之后,后续的用户注册只能等待。你们领导让你优化这个问题,你找啊找,于是AMQP出现了,你采用了如下方式
你把一个用户注册的消息放到MQ队列中,其他消费者从这个队列里面去取出来然后实现自己的逻辑,完美。
为了保证数据从Producer到Consumer的正确传递,AMQP中对于Server层定义了几个概念
还有几个概念是上述图中没有标明的
而对于Exchanges来说,他的路由规则有以下三种
到此为止,RabbitMQ的基本概念讲完了,但是这边还有一些问题,比如如果突发宕机,RabbitMQ如何能够保证消息不丢失呢?我们知道,任何一个组件都是有理论性能上限的,如果数据量大到RabbitMQ也处理不过来那该怎么办呢?在下一章中我们一起来分析这些问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。