之前写过一篇博客简单介绍了消息队列的基础知识,当时立下了 Flag,说好下次会专门介绍 RabbitMQ,说到做到,前来填坑。
消息队列入门基础篇博客链接如下:
https://blog.csdn.net/j1231230/article/details/119180550
什么是 RabbitMQ
RabbitMQ 是实现了高级消息队列协议(AMQP)的面向消息的中间件。RabbitMQ 服务器使用 Erlang 语言编写,是一种应用程序之间的通信方法,在分布式系统开发中应用非常广泛。
上面提到了高级消息队列协议(AMQP),它的介绍如下:
AMQP 是一个具有现代特征的二进制协议,也是一个提供统一消息服务的应用层标准高层消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
AMQP 和 JMS
MQ 作为消息通信的模型,目前有两种主流实现方式:AMQP 和 JMS。
两者间的区别和联系:
-
JMS 是通过定义统一的接口来对消息进行统一操作;AMQP是通过规定协议来统一数据交互的格式;
-
JMS 限定了必须使用 Java 语言;AMQP 只是协议,不规定实现方式,因此是跨语言的;
-
JMS 规定了两种消息模型;而 AMQP 的消息模型更加丰富;
通过比较可以发现,AMQP 的统一数据交互格式更加优雅,支持跨语言,同时还支持更丰富的消息模型,所以 RabbitMQ 采用 AMQP 的实现方式也是很合理的。
RabbitMQ 的优势(为什么选择 RabbitMQ)
发展前景角度:
- 有商业化的运营,不会轻易死掉;
- 遵循 AMQP 协议,不会被绑架;
- 强大的社区支持,为技术进步提供动力;
- 大量成功的应用案例,例如阿里、网易等互联网巨头都有使用;
技术角度:
- Erlang 开发,是 AMQP 的最佳搭档,在支持持久化的消息队列中性能相对优秀;
- 支持消息持久化、消息确认机制、灵活的任务分发机制等,功能丰富;
- 可靠性高;
- 集群扩展容易,并且可以通过增加节点实现成倍的性能提升;
RabbitMQ 的工作原理
RabbitMQ 的基本结构如下所示: