这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
消息队列
消息队列可以理解为一种应用间的通信方式,也可以理解为就是一个暂存消息的地方。如在消息队列中,服务A要发送一条消息给服务B,服务A并不会直接把消息直接发送给B,而是把消息发送到消息队列中,然后B从消息队列中获取消息,A发送消息后不必一直等待消息被成功处理才返回,A发送后就继续去干自己的事,B不需要知道是谁发的消息只管从消息队列中取消息,这样服务A和服务B之间就实现了异步和解耦。
RabbitMQ
RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言编写。
优点
-
解耦。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层,保存这个数据。
-
流量削峰。如我们最熟悉不过的抢课,当系统开始开放选课时,系统将会瞬时有大量的请求打入接口业务逻辑处理,导致应用占据服务器资源,为了避免宕机,我们可以在将这些大量的请求先存入到消息队列中, 而不直接打入我们的系统后台业务处理接口,然后再由我们接口从消息队列中来获取这些请求并处理,避免大量请求打入后端接口。
-
异步处理。如用户注册服务,当用户完成填写密码等信息提交注册后,后端会进行一系列处理,例如将信息保存到数据库、发送注册成功邮件、微信推送消息等,如果用户提交注册后还要等这些操作完成后才能返回登录成功,而完成这些服务需要耗费时间,所以用户会比较反感,因此我们可以利用RabbitMQ,用户注册后直接返回注册成功,而像发送邮件这些,我们只需要将用户信息投递到消息队列,由邮件服务到RabbitMQ中取数据再去发送邮件,这样就能实现异步处理,优化用户体验。
Centos7下RabbitMQ的安装
-
首先我们需要到官网下载RabbitMq的安装包,官网传送门
-
Centos7.x、Erlang,RabbitMQ是采用Erlang语言开发的,所以系统环境必须提供Erlang环境。
-
将下载的Erlang安装包上传到Linux服务器上,离线安装Erlang,注意,Erlang的版本要和RabbitMq的版本匹配,不然后面会出Bug
- 上传后使用以下命令解压安装包
rpm -ivh erlang-22.3.4.1-1.el7.x86_64.rpm- 安装Erlang,输入以下命令
yum install -y erlang- 验证是否安装完成,输入
erl命令
[root@localhost rabbitmq]# erl Erlang/OTP 22 [erts-10.7.2.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe] Eshell V10.7.2.1 (abort with ^G) 1> halt(). -
安装RabbitMQ
(1)到官网下载对应的安装包,注意RabbitMQ的版本要和Erlang版本对应
(2)安装RabbitMQ前要先安装socat
yum install -y socat(3) 正式安装RabbitMQ,将官网下载的rpm安装包上传到服务器上指定的目录下,使用以下命令进行解压.
[root@localhost rabbitmq]# rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm(4) 安装RabbitMQ
yum install rabbitmq-server -y(5)启动RabbitMQ服务
- 启动RabbitMQ服务
systemctl start rabbitmq-server - 查看RabbitMQ服务的状态
systemctl status rabbitmq-server - 设置RebbitMQ开机自启动
systemctl enable rabbitmq-server
[root@localhost rabbitmq]# systemctl start rabbitmq-server [root@localhost rabbitmq]# systemctl status rabbitmq-server ● rabbitmq-server.service - RabbitMQ broker Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled) Active: active (running) since 六 2021-03-20 22:15:43 CST; 46s ago Main PID: 57258 (beam.smp) Status: "Initialized" Memory: 86.0M CGroup: /system.slice/rabbitmq-server.service ├─57258 /usr/lib64/erlang/erts-10.7.2.1/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbb... ├─57273 erl_child_setup 32768 ├─57294 /usr/lib64/erlang/erts-10.7.2.1/bin/epmd -daemon ├─57313 inet_gethost 4 └─57314 inet_gethost 4 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: ########## Licensed under the MPL 2.0. Website: https://rabbitmq.com 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Doc guides: https://rabbitmq.com/documentation.html 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Support: https://rabbitmq.com/contact.html 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Tutorials: https://rabbitmq.com/getstarted.html 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Monitoring: https://rabbitmq.com/monitoring.html 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Logs: /var/log/rabbitmq/rabbit@localhost.log 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: /var/log/rabbitmq/rabbit@localhost_upgrade.log 3月 20 22:15:35 localhost.localdomain rabbitmq-server[57258]: Config file(s): (none) 3月 20 22:15:42 localhost.localdomain rabbitmq-server[57258]: Starting broker... completed with 0 plugins. 3月 20 22:15:43 localhost.localdomain systemd[1]: Started RabbitMQ broker. - 启动RabbitMQ服务
-
RabbitMQ Web管理界面及授权操作
- 默认情况下,rabbitMq是没有安装web的客户端插件,需要安装才可以生效
[root@localhost rabbitmq]# rabbitmq-plugins enable rabbitmq_management #安装后即可通过服务器ip地址+:15672 访问RabbitMqWeb端,RabbitMq是有一个默认的账号和密码guest,默认情况下只能在本机下访问,所以需要添加一个远程登录的用户-
默认只能在本机下登录RabbitMQWeb端,所以我们需要授权账户和密码,以提供远程访问. 主要有以下几种用户级别:
1、
administrator:可以登录控制台,查看所有信息、可以定义rabbitMQ进行管理2、
monitoring: 监控者 登录控制台,查看所有信息3、
policymarker: 策略制定者,登录控制台,制定策略4、
management: 普通管理员 登录控制台
(1)新增用户 [root@localhost rabbitmq]# rabbitmqctl add_user admin admin Adding user "admin" ... Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more. (2)设置用户分配操作权限 [root@localhost rabbitmq]# rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... ** -
使用服务器的IP+端口号,如192.268.188.130:15672即可访问RabbitMQ Web管理界面,输入账户密码,即可显示RabbitMQweb端管理界面,如下:
🏁以上就是对入门RabbitMQ的简单介绍,后面会继续推出RabbitMQ的相关文章,欢迎大家关注,如果有错误的地方,还请留言指正,如果觉得本文对你有帮助那就点个赞👍吧😋😻😍