一、前言
上一篇博客介绍了用线程池实现异步任务。这一篇博客谈一谈用MQ实现异步任务。MQ的产品有灰常多,像什么MSMQ、activeMQ、RocketMQ、RabbitMQ、kafak等。在此之前先谈一谈对消息队列的理解。
二、MQ
MQ是一种应用程序对应用程序的通讯方法,应用程序通过读写出入队列的消息来进行通信,两者无需建立连接,发布者和消费者无需知道对方的存在。
MQ是生产者--消费者模型的一个代表,一端往消息队列中不断写入消息,而另一端则可以不断读取或订阅队列中的消息。
使用场景:
1、异步处理:在项目中将一些无需及时返回且耗时的操作提取出来,进行异步处理,采用异步处理,将大大节省了服务器的请求响应时间,从而提高了系统的吞吐量。
2、消息推送
三、RabbitMQ特点
RabbitMQ是一个由Erlang语言开发的AMQP的开源实现。
RabbitMQ的特点为:
1、可靠性
RabbitMQ提供了多种技术可以让你在性能和可靠性之间进行权衡,如持久性、传输确认、投递确认。
2、灵活的路由
在消息进行队列之前,通过Exchange来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的Exchange来实现,针对更复杂的路由功能,可以将多个Exchange绑定在一起,也可以通过插件机制来实现自己的Exchange。
3、消息集群
多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
4、高可用
在同一集群中队列可以被镜像到多台机器,使得在部分节点出现问题的情况下,队列仍然可用。
5、多协议
RabbitMQ支持多种消息队列协议。
6、多语言客户端
支持java、.NET、Ruby等
7、管理界面
RabbitMQ提供了一个易用的用户界面,用户可以监控和管理Broker的许多方面。
8、跟踪机制
如果消息异常,RabbitMQ提供了消息跟踪机制,使用者可以找出发生了什么。
9、插件机制</