RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现 。采用该技术,我们可以实现异步处理、流量削峰、系统解耦 。
RabbitMQ 整体是一个与其他中间件相同的模型,主要是负责接收、存储和转发消息 。可以把消息传递的过程想想成快递:将一个快递送到快递公司,快递公司由快递员送到收件人的人中,RabbitMQ就类似于一个快递公司,也就是RabbitMQ的交换机模型 。
什么是消息队列(MQ)消息是在不同应用间传递的数据 。这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象 。消息队列(Message Queue)简单来说就是一种应用程序间的通讯方式,消息发送后立即返回,然后由消息系统保证消息的可靠性传输,消息生产者只需要把消息发到MQ中就可以了,不需要关心消息的消费,同样,消息消费者只管从MQ中拉取消息而不管是谁生产的消息,通过这样的一个“互相不知道对象存在”模式,将消息的生产者和消息的消费者解耦了 。
什么场景下考虑使用消息队列从上面可以知道,消息队列是一种应用间的异步协作机制,那么我们什么时候需要用到MQ呢?
以常见的订单系统为例,当用户点击「下单」后的业务逻辑可能包括:扣减库存、生成相应订单数据、发短信通知等 。在项目和业务发展初期上面这些逻辑可能放在一起执行,随着业务的发展订单量的增加,需要提升系统服务的性能,此时就可以将一些不需要立即生效的操作拆分出来异步执行,比如发送短信通知等 。这种场景下就可以使用MQ,在下单主流程(比如扣减库存、生成订单数据等)完成之后发送一条消息到MQ让主流程快速走完,然后由另外一个线程拉取MQ的消息,执行相应的业务逻辑 。这里的例子主要是用消息队列来解耦 。
RabbitMQ的特点RabbitMQ是一个由Erlang语言开发的AMQP的开源实现 。AMQP(Advanced Message Queue:高级消息队列协议)它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制 。RabbitMQ最初起源于消息系统,用于在分布式系统中存储转发消息,具体有如下一些特点:
- 可靠性:RabbitMQ使用一些机制来保证可靠性,比如持久化、传输确认机制(ack)和发布确认等 。
- 灵活的路由策略:在消息进入队列之前,通过Exchange来路由消息,对于典型的路由功能,RabbitMQ已经提供了一些内置的Exchange来实现 。针对复杂的路由功能,可以将多个Exchange绑在一起,也通过插件机制实现自己的Exchange 。
- 消息集群:多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker 。
- 高可用:队列可以在集群中的集群上进行镜像,使得在部分节点出问题的情况下队列仍然可用 。
- 多种协议:RabbitMQ支持多种消息队列协议,比如STOMP、MQTT等 。
- 多语言客户端:RabbitMQ几乎支持多有常用的语言,比如:JAVA、.NET等
- 管理界面:RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息Broker的许多方面 。
RabbitMQ实战视频教程
https://www.bilibili.com/video/BV1Ap4y1D7tU
RabbitMQ教程配套资料下载
http://www.bjpowernode.com/?toutiao
课程学习目录001.RabbitMQ: 什么是消息队列
•002.RabbitMQ: 为什么使用消息队列
•003.RabbitMQ: RabbitMQ的特点
•004.RabbitMQ: 安装RabbitMQ
•005.RabbitMQ: 启动和关闭服务
•006.RabbitMQ: 插件添加
•007.RabbitMQ: 用户管理
•008.RabbitMQ: 权限分配
•009.RabbitMQ: vhost
•010.RabbitMQ: AMQP协议机制
•011.RabbitMQ: 消息路由交换机类型
•012.RabbitMQ: Direct类型交换机
•013.RabbitMQ: Fanout类型交换机
•014.RabbitMQ: Topic类型交换机
•015.RabbitMQ: 消息发送
【RabbitMQ入门使用教程】•016.RabbitMQ: 消息发送测试
•017.RabbitMQ: 消息接收
•018.RabbitMQ: 消息接收测试
•019.RabbitMQ: 交换机-direct-消息接收
•020.RabbitMQ: 交换机-direct-消息发送
•021.RabbitMQ: 交换机-fanout-消息接收
推荐阅读
- Java业务开发常见错误
- MySQL 使用 Mysqldump 备份导入数据导致主从异常
- 容器如何使用tini作为启动进程
- 冬天使用蚕丝被的好处
- 6款超好用的macOS工具软件,提高Mac使用体验
- 15个Python入门小程序,你都知道哪些
- 内网穿透工具使用总结
- 使用 Python 将 MP4视频 转换为GIF动画
- Centos7使用ping命令对普通用户提权
- Hive安装和使用