RabbitMQ的介绍和安装

本文介绍了 MQ 的基本概念、使用场景,并提供了在本地环境下安装 RabbitMQ 的详细步骤,适合消息队列初学者快速上手。
single

MQ

MQ 介绍

MQ:MessageQueue,消息队列。这东西分两个部分来理解:

  • 队列,是一种 FIFO 先进先出的数据结构。
  • 消息:在不同应用程序之间传递的数据。

将消息以队列的形式存储起来,并且在不同的应用程序之间进行传 递,这就成了 MessageQueue

消息队列是一种在应用程序之间传递消息的技术。它提供了一种异步通信模式,允许应用程序在不同的时间处理消息。消息队列通常用于解耦应用程序,以便它们可以独立地扩展和修改。在消息队列中,消息发送者将消息发送到队列中,然后消息接收者从队列中接收消息。这种模式允许消息接收者按照自己的节奏处理消息,而不必等待消息发送者处理完消息。常见的消息队列包括 RabbitMQ、Kafka 和 ActiveMQ 等。

MQ 的三大特性:

  1. 解耦
  2. 异步
  3. 削峰填谷

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 则是一些管理功能。