MQ
MQ 介绍
MQ:MessageQueue,消息队列。这东西分两个部分来理解:
- 队列,是一种 FIFO 先进先出的数据结构。
- 消息:在不同应用程序之间传递的数据。
将消息以队列的形式存储起来,并且在不同的应用程序之间进行传 递,这就成了 MessageQueue。
消息队列是一种在应用程序之间传递消息的技术。它提供了一种异步通信模式,允许应用程序在不同的时间处理消息。消息队列通常用于解耦应用程序,以便它们可以独立地扩展和修改。在消息队列中,消息发送者将消息发送到队列中,然后消息接收者从队列中接收消息。这种模式允许消息接收者按照自己的节奏处理消息,而不必等待消息发送者处理完消息。常见的消息队列包括 RabbitMQ、Kafka 和 ActiveMQ 等。
MQ 的三大特性:
- 解耦
- 异步
- 削峰填谷
MQ 应用场景
而 MQ 也就是为了这样的场景创建的中间服务。MQ 中间件在很多业务场景中都扮演着很重要的角色。例如秒杀场景:
在典型的秒杀场景,瞬间产生的大量下单请求很容易让后端的下单服务崩溃。这时,就可以让下单系统将订单消息发送到 MQ 中间暂存起来,而后端的额下单服务就可以从 MQ 中获取数据,按照自己的处理能力,慢慢进行下单。另外,下单是一个比较复杂的业务,需要通知支付系统、库存系统、物流系统、营销系统等大量的下游系统。下单系统光一个个通知这些系统,就会需要很长时间。这时,就可以将下单完成的消息发送到 MQ,然后下游的各种系统可以从 MQ 中获取下单完成的消息,进行异步处理。这样也能极大提高下单系统的性能。
主流 MQ 产品比较
在 MQ 长期发展过程中,诞生了很多 MQ 产品,但是有很多 MQ 产品都已经逐渐被淘汰了。比如早期的 ZeroMQ, ActiveMQ 等。目前最常用的 MQ 产品包括 Kafka、RabbitMQ 和 RocketMQ。我们对这三个产品做下简单的比较,重点需要理解他们的适用场景。
队列 | 优点 | 缺点 | 适合场景 | |
---|---|---|---|---|
Kafka | 高吞吐量和低延迟,适合大规模数据处理;可扩展性强;广泛的社区支持和丰富的生态系统;支持实时流处理和复杂的数据流分析 | 会丢数据,功能比较单一 | 日志分析;大数据采集 | |
RabbitMQ | 消息可靠性高,功能全面 | 在高吞吐量场景下性能可能不足;集群和高可用性设置较复杂 | 小规模场景 | |
RocketMQ | 低延迟、高性能;支持顺序消息和事务消息;强大的消息追踪和查询能力;高吞吐、高性能、高可用功能全面 | 开源版比如云版本,文档比较简单客户端只支持Java | 几乎全场景 |
Kafka 高吞吐量和低延迟,适合大规模数据处理;可扩展性强;广泛的社区支持和丰富的生态系统;支持实时流处理和复杂的数据流分析会丢数据,功能比较单一日志分析;大数据采集 RabbitMQ 消息可靠性高,功能全面 在高吞吐量场景下性能可能不足;集群和高可用性设置较复杂 小规模场景 RocketMQ 低延迟、高性能;支持顺序消息和事务消息;强大的消息追踪和查询能力;高吞吐、高性能、高可用功能全面 开源版比如云版本,文档比较简单客户端只支持Java 几乎全场景
RabbitMQ 安装
官网安装说明: Installing on Debian and Ubuntu | RabbitMQ
官网是推荐直接使用官方提供的脚本来进行安装:
Installing on Debian and Ubuntu | RabbitMQ
插件 rabbitmq_management
安装完成后,我们可以开启插件 rabbitmq_management
这样我们就能通过 web 访问和 RabbitMQ 服务了。
相关命令:
# 查看支持的插件列表
rabbitmq-plugins list
# 启用插件 rabbitmq_management
rabbitmq-plugins enable rabbitmq_management
这样就能访问 http://localhost:15672/ 了,默认账户密码是 guest/guest
。
guest 账户默认只能限制本机访问,如果要支持远程访问则需要再创建一个账号:
# 创建用户
rabbitmqctl add_user <username> <password>
# 给用户授权管理员角色
rabbitmqctl set_user_tags <username> administrator
# 给用户所有资源的配置、读写权限
rabbitmqctl set_permissions -p "/" <username> ".*" ".*" ".*"
# 查看权限
rabbitmqctl list_permissions -p /
配置完成后,我们就可以通过 admin 账户来登录 web 控制台了。
登录控制台后上方就能看到 RabbitMQ 的主要功能。其中 Overview 是概述,主要展示 RabbitMQ 服务的一些整体运行情况。后面 Connections、Channels、Exchanges 和 Queues 就是 RabbitMQ 的核心功能。最后的 Admin 则是一些管理功能。