一、AMQP协议
高级消息队列协议,一种约定俗成的规范。主要适用的消息中间件为RabbitMq、ActiveMq。
发布者(Publisher)发布消息(Message),经由交换机(Exchange)。
交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。
最后 AMQP 代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。
AMQP模型
二、RabbitMQ概念
RabbitMQ是一个消息中间件,可以接收、存储并转发消息,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。
它类似于我们生活中的快递站点,当你要发送包裹时,你把你的包裹放在快递站点,快递员最终会把你的快递送到收件人那里。
应用场景:
- 异步处理。把消息放入消息中间件中,等到需要的时候再去处理。
- 流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
- 应用解耦。假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。
三、RabbitMQ安装
RabbitMQ依赖于erlang语言,所以安装之前需要先安装erlang语言环境
erlang下载地址: https://www.erlang-solutions.com/downloads/
rabbitmq下载地址:https://github.com/rabbitmq/rabbitmq-server/releases
本文采用的版本
rabbitmq:3.8.19
erlang:23.2
准备好对应的rmp安装包后,我们就可以开始了
1.安装erlang
安装所需环境
yum -y install unixODBC
yum -y install socat
安装erlang
rpm -Uvh esl-erlang_23.2-1_centos_7_amd64.rpm
检测是否安装成功
[root@localhost soft]# erl
Erlang/OTP 23 [erts-11.1.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V11.1.4 (abort with ^G)
1>
2.安装rabbitmq
rpm -Uvh rabbitmq-server-3.8.19-1.el7.noarch.rpm
rabbitmq现已安装在您的系统上。
操作rabbitmq命令:
# 加入开机自启
systemctl enable rabbitmq-server
# 启动rabbitmq
systemctl start rabbitmq-server
# 停止rabbitmq
systemctl stop rabbitmq-server
# 重启rabbitmq
systemctl restart rabbitmq-server
# 检查rabbitmq运行状态
systemctl status rabbitmq-server
成功启动后,状态如下:
[root@localhost soft]# 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-07-20 17:17:39 CST; 21s ago
Main PID: 6590 (beam.smp)
Status: "Initialized"
CGroup: /system.slice/rabbitmq-server.service
├─6590 /usr/lib/erlang/erts-11.1.4/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -- -root /usr/lib/erlang -prog...
├─6605 erl_child_setup 32768
├─6639 /usr/lib/erlang/erts-11.1.4/bin/epmd -daemon
├─6664 inet_gethost 4
└─6665 inet_gethost 4
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: TLS Library: OpenSSL - OpenSSL 1.0.2k-fips 26 Jan 2017
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Doc guides: https://rabbitmq.com/documentation.html
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Support: https://rabbitmq.com/contact.html
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Tutorials: https://rabbitmq.com/getstarted.html
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Monitoring: https://rabbitmq.com/monitoring.html
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Logs: /var/log/rabbitmq/rabbit@localhost.log
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
7月 20 17:17:30 localhost.localdomain rabbitmq-server[6590]: Config file(s): (none)
7月 20 17:17:38 localhost.localdomain rabbitmq-server[6590]: Starting broker... completed with 0 plugins.
7月 20 17:17:39 localhost.localdomain systemd[1]: Started RabbitMQ broker.
3.修改防火墙和SELinux规则
如果您已运行防火墙 ,运行以下命令开放端口。如果没有开启防火墙,可以忽略此步骤。
firewall-cmd –zone=public –permanent –add-port=4369/tcp
firewall-cmd –zone=public –permanent –add-port=25672/tcp
firewall-cmd –zone=public –permanent –add-port=5671-5672/tcp
firewall-cmd –zone=public –permanent –add-port=15672/tcp
firewall-cmd –zone=public –permanent –add-port=61613-61614/tcp
firewall-cmd –zone=public –permanent –add-port=1883/tcp
firewall-cmd –zone=public –permanent –add-port=8883/tcp
firewall-cmd –reload
如果您启用SELinux,则必须运行以下命令以允许RabbitMQ服务。
setsebool -P nis_enabled 1
4.开启rabbitmq的web控制台
启动RabbitMQ Web管理控制台
rabbitmq-plugins enable rabbitmq_management
访问RabbitMQ的管理面板http://IP:15672/
默认用户的用户名密码为guest/guest,如果直接使用此用户登录,会提示User can only log in via localhost
image.png
解决方案:
第一种
创建/etc/rabbitmq/rabbitmq.config文件并添加以下内容
[{rabbit, [{loopback_users, []}]}].
然后重启rabbitmq服务即可
第二种
直接添加其他用户
# 添加用户并设置密码
rabbitmqctl add_user admin 123456
# 给用户添加标签
rabbitmqctl set_user_tags admin administrator
# 给用户设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
完成后可直接用创建的用户登录
image.png
用户列表.png
网友评论