在如今微服务、分布式时代,不懂一点消息队列、服务解耦、异步通信,都不好意思说自己做过Java高并发、分布式项目了;趁着放假,debug熬夜整理了消息中间件RabbitMQ相关的知识点,对于没撸过这一技术栈的小伙伴而言可以说是福利了,而对于已经撸过的小伙伴而言不妨再过一遍,毕竟温故而知新嘛!
以下为本文的目录,先一睹为快:
- 一、基本概念
- 二、RabbitMQ底层架构
- 三、如何在Spring Boot项目中使用
- 四、福利奉上!
话不多说,咱们直接进入正题!
一、简介
1.RabbitMQ,一款由Erlang语言开发的、基于AMQP(高级消息队列协议)实现的开源消息代理软件,俗称“消息中间件”;
2.那何谓“AMQP”呢,解释为中文:高级消息队列协议,是应用层协议的一个开放标准,专门面向消息而设计的,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制;
3.据说这RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现还挺不俗,具体特点有:
(1)可靠性:RabbitMQ使用一些机制来保证可靠性,如持久化、消费确认、发布确认;
(2)灵活的路由:在消息进入队列之前,通过交换器Exchange 来路由消息的;对于典型的路由功能,RabbitMQ 已经提供了一些内置Exchange来实现;针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange
(3)消息集群:多个RabbitMQ 服务器可以组成一个集群,形成一个逻辑上的Broker(消息代理服务器);
(4)高可用:队列可以在集群中的机器节点进行镜像备份,当部分节点出问题时队列仍然可用;
(5)多种协议支持;RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT等等;
(6)多语言客户端:RabbitMQ 几乎支持所有常用的开发语言,比如 Java、.NET、Ruby 等;
(7)Web控制台管理界面:RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息代理服务器 Broker 中的方方面面(包括队列、交换器、路由、消息消费情况、队列绑定情况、消费者实例情况、使用账户等等)
(8)跟踪机制:RabbitMQ 提供了消息跟踪机制,在消息传输期间出现异常时使用者可以找出到底发生了什么事!
(9)插件机制:RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件,比如RabbitMQ自带的“延迟队列插件”就相当好用!
二、RabbitMQ底层架构与基本概念
1.如下图所示为RabbitMQ底层的架构图,消息在底层传输期间几乎经历了其中所涉及的每个组件!