Appearance
RabbitMQ 介绍与安装
本文将介绍消息队列的相关概念、RabbitMQ及其在Docker中的下载运行。
1. 消息队列介绍
**消息队列(Message Queue,简称 MQ)**是一种用于在分布式系统中存储和传递消息的中间件技术。
在现代复杂的分布式系统中,不同的服务(或组件)通常需要相互通信和协作。消息队列的主要目的是解决这种服务间通信的问题,并带来许多额外的好处。
解耦:服务之间高度耦合,一个服务的变更可能会影响到其他服务。例如,如果订单服务直接调用积分服务,那么订单服务就强依赖于积分服务的可用性,如果积分服务不可用,将导致下单失败!
如果引入了消息队列,那么消费者(例如订单服务)只需要把下单成功的消息(单号)发送到消息队列,消费者(例如积分服务)获取到消息,就可以进行业务操作了。这样订单服务不再强依赖于积分服务。
异步通信:生产者发送消息后,立即返回,不需要等待消费者处理完成;消费者在方便时从消息队列中拉取或接收消息并进行处理。这大大提高了系统的响应速度和吞吐量,尤其适用于耗时操作。
削峰填谷:当系统面临瞬时大量请求时,所有消息会先进入消息队列,消费者可以按照自己的处理能力,稳定地从队列中获取消息进行处理。这样可以避免后端服务在短时间内被突发流量压垮,确保系统稳定性。
弹性伸缩:当消息处理能力不足时,可以增加消费者实例来并行处理消息,提高系统的整体吞吐量;当请求量下降时,可以减少消费者实例,节省资源。
高可用性和可靠性:消息队列通常具备消息持久化功能,即使消费者暂时下线,消息也不会丢失。消息队列本身也通常是集群部署的,确保自身的高可用性,防止单点故障。
2. AMQP
AMQP 全称是 Advanced Message Queuing Protocol(高级消息队列协议)。它是一个开放标准的应用层协议,专门为消息中间件设计。
可以把它理解为消息队列领域的“HTTP”,它定义了消息如何在不同的应用程序或系统之间可靠、安全地进行交换。
AMQP 就像一套标准化的“通信规则”。消息队列产品(如 RabbitMQ)就是遵循 AMQP 协议的具体实现。当在 Spring Boot 中使用 RabbitMQ 时,实际上就是在利用 Spring AMQP 库通过 AMQP 协议与 RabbitMQ 进行通信。
JMS 全称是 Java Message Service(Java 消息服务),是一个Java 平台上的 API(应用程序编程接口)标准。JMS 定义了 Java 应用程序如何创建、发送、接收和读取消息的通用方式,用于在两个应用程序之间或分布式系统中进行异步通信。也就是说,JMS是Java平台定义的消息队列协议,只要消息队列提供了JMS实现,那么Java应用程序就可以使用JMS API与之进行通信。
3. RabbitMQ
RabbitMQ 是一个开源的、功能强大的消息代理 (Message Broker),也常被称为消息队列中间件 (Message Queue Middleware),它实现了 AMQP 标准。
官方地址:https://www.rabbitmq.com/
在RabbitMQ中,存在以下概念:
- 生产者 (Producer): 产生并发送消息的应用程序。
- 消费者 (Consumer): 接收并处理消息的应用程序。
- 消息 (Message): 生产者和消费者之间传递的数据单元,通常包含消息体(Payload)和一些属性(Properties)。
- 队列 (Queue): 消息的存储缓冲区。消息发送到队列,消费者从队列中获取消息,队列可以被认为是 RabbitMQ 中消息的“终点站”。
- 交换机 (Exchange):消息的入口点。生产者将消息发送到交换机,而不是直接发送到队列。交换机负责接收消息,并根据路由规则将消息分发到一个或多个队列。RabbitMQ 提供多种类型的交换机,例如:
- Direct Exchange (直连交换机): 根据精确匹配的路由键将消息发送到队列。
- Fanout Exchange (扇形交换机): 将所有收到的消息广播到所有绑定到它的队列,忽略路由键。
- Topic Exchange (主题交换机): 根据路由键和绑定键的模糊匹配(使用通配符
*和#)将消息发送到队列。
- 绑定 (Binding): 定义了交换机和队列之间的连接关系。它告诉交换机,应该将哪些消息路由到哪个队列。绑定通常会包含一个绑定键 (Binding Key)。
- 路由键 (Routing Key): 生产者发送消息时携带的一个字符串。交换机根据这个路由键和自身的类型以及绑定的绑定键来决定消息的去向。
4. 其他消息队列
除了RabbitMQ,还存在着其他知名的消息队列中间件,例如:RocketMQ,Kafka,A ctiveMQ,以下是这些消息队列的比较:

5. RabbitMQ的运行
使用Docker运行RabbitMQ,只需要下面一条命令:
bash
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management- 5672端口是应用程序与RabbitMQ交互的地址;
- 15672端口是后台管理地址;
运行成功后,在宿主机上访问RabbitMQ管理后台地址:http://127.0.0.1:15672

输入默认的账号密码(都是guest),进入后台管理界面:

至此,RabbitMQ已成功运行。