RabbitMQ入门操作(一)

郎家岭伯爵 2023年01月29日 244次浏览

理论

什么是消息队列

”消息“指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。

“消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。

为什么使用消息队列

主要有三个作用:

  • 解耦
  • 异步
  • 削峰

解耦

如图所示。假设有系统B、C、D都需要系统A的数据,于是系统A调用三个方法发送数据到B、C、D。这时,系统D不需要了,那就需要在系统A把相关的代码删掉。假设这时有个新的系统E需要数据,这时系统A又要增加调用系统E的代码。为了降低这种强耦合,就可以使用MQ,系统A只需要把数据发送到MQ,其他系统如果需要数据,则从MQ中获取即可

异步

如图所示。一个客户端请求发送进来,系统A会调用系统B、C、D三个系统,同步请求的话,响应时间就是系统A、B、C、D的总和,也就是800ms。如果使用MQ,系统A发送数据到MQ,然后就可以返回响应给客户端,不需要再等待系统B、C、D的响应,可以大大地提高性能。对于一些非必要的业务,比如发送短信,发送邮件等等,就可以采用MQ。

削峰

如图所示。这其实是MQ一个很重要的应用。假设系统A在某一段时间请求数暴增,有5000个请求发送过来,系统A这时就会发送5000条SQL进入MySQL进行执行,MySQL对于如此庞大的请求当然处理不过来,MySQL就会崩溃,导致系统瘫痪。如果使用MQ,系统A不再是直接发送SQL到数据库,而是把数据发送到MQ,MQ短时间积压数据是可以接受的,然后由消费者每次拉取2000条进行处理,防止在请求峰值时期大量的请求直接发送到MySQL导致系统崩溃

RabbitMQ的特点

RabbitMQ 是一款使用 Erlang 语言开发的,实现 AMQP(高级消息队列协议) 的开源消息中间件。首先要知道一些 RabbitMQ 的特点,官网可查:

  • 可靠性。支持持久化,传输确认,发布确认等保证了 MQ 的可靠性。
  • 灵活的分发消息策略。这应该是 RabbitMQ 的一大特点。在消息进入 MQ 前由 Exchange(交换机) 进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
  • 支持集群。多台 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
  • 多种协议。RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
  • 支持多种语言客户端。RabbitMQ 几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
  • 可视化管理界面。RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 。
  • 插件机制。RabbitMQ 提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。

实践

安装RabbitMQ

安装erLang语言,配置环境变量

RabbitMQ 基于 erLang 语言实现,因此需要先安装 erLang 语言环境。

首先到 erLang 官网下载 Windows 安装包。下载下来的安装包一直点击下一步安装即可。

接下来配置环境变量:

Windows 中有两种环境变量:用户变量和系统变量。其中用户变量只对当前用户有效,系统变量对所有用户有效。

验证环境变量是否配置成功:

erl -version

安装RabbitMQ服务端

  1. 下载 Windows 版本对应的服务端安装包,然后一直点击下一步进行安装。

  1. 接着进入安装目录的 sbin 文件夹并打开 cmd ,输入 rabbitmq-plugins enable rabbitmq_management 命令安装管理页面的插件:

  1. 然后双击 rabbitmq-server.bat 启动服务。

  2. 这时,打开浏览器输入 http://localhost:15672,账号密码默认是:guest/guest

  1. 至此,我们已经成功启动 RabbitMQ 服务。

启动失败

如果双击 rabbitmq-server.bat 启动服务时,DOS 窗口一闪而过,那么有可能是在安装 RabbitMQ.exe 结束的时候,默认启动了服务。

对一闪而过的 DOS 窗口,如果我们手速快点可以截到如下截图:

这个截图明确说明是由于另外的 RabbitMQ 服务占用了 25672 端口导致服务启动失败。此时我们只需要在任务管理器中找到此服务停止即可:

总结

本文我们简单介绍了 RabbitMQ 的理论部分以及 RabbitMQ 服务的启动,接下来我们将使用 SpringBoot 完成对 RabbitMQ 的整合。

捐赠页面示例