RabbitMQ官网:https://www.rabbitmq.com/
环境说明
1
2
3
4
5
6
root@xjr-pc:/etc/init.d# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
linux 版本:Ubuntu 18.04.1 LTS
erlang 版本:erlang-24.0
rabbitmq 版本:rabbitmq_server-3.9.19
源码安装Erlang,RabbitMQ
Rabbitmq采用erlang语言开发,所以在安装rabbitmq之前,需要安装erlang。
2.1. 下载Erlang 和 RabbitMQ源码包
Erlang 官网下载地址:http://www.erlang.org/download
选择 opt_src_版本号.tar.gz (这里我选择的是 otp_src_24.0.tar.gz)
Linux 服务器上使用 wget http://www.erlang.org/download/otp_src_24.0.tar.gz 进行下载
1
wget http : // www . erlang . org / download / otp_src_24 . 0. tar . gz
RabbitMQ 官网下载:https://www.rabbitmq.com/download.html
Linux 服务器上通过 wget 下载:
1
wget https : // github . com / rabbitmq / rabbitmq - server / releases / download / v3 . 9.19 / rabbitmq - server - generic - unix - 3.9 . 19. tar . xz
2.2. 安装Erlang
2.2.1 上传并解压 Erlang 安装包
1
2
3
4
5
6
7
8
9
root@xjr-pc:/www/server/src# pwd
/www/server/src
root@xjr-pc:/www/server/src# tar -zxvf otp_src_24.0.tar.gz
root@xjr-pc:/www/server/src# ll
total 102300
drwxr-xr-x 3 root root 4096 May 4 04:07 ./
drwxr-xr-x 12 root root 4096 May 4 03:45 ../
drwxr-xr-x 12 2004 uucp 4096 May 11 2021 otp_src_24.0/
-rw-r--r-- 1 root root 101193664 May 12 2021 otp_src_24.0.tar.gz
2.2.2 编译安装Erlang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#创建Erlang安装目录
root@xjr-pc:/www/server# mkdir -p /www/server/erlang
#进入otp_src_24目录(解压目录)
root@xjr-pc:/www/server/src/otp_src_24.0# pwd
/www/server/src/otp_src_24.0
root@xjr-pc:/www/server/src/otp_src_24.0# ./configure prefix=/www/server/erlang
root@xjr-pc:/www/server/src/otp_src_24.0# make && make install
#安装完成后进入安装路径目录
root@xjr-pc:/www/server/erlang# pwd
/www/server/erlang
root@xjr-pc:/www/server/erlang# ll
total 16
drwxr-xr-x 4 root root 4096 May 4 04:18 ./
drwxr-xr-x 13 root root 4096 May 4 04:10 ../
drwxr-xr-x 2 root root 4096 May 4 04:19 bin/
drwxr-xr-x 3 root root 4096 May 4 04:18 lib/
2.2.3 配置环境变量 和 查看 Erlang 是否安装成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#将Erlang安装路径/bin 添加到环境变量
root @ xjr - pc : / etc / profile . d # pwd
/ etc / profile . d
root @ xjr - pc : / etc / profile . d # cat erlang.sh
ERLANG_HOME =/ www / server / erlang
PATH =$ PATH : $ ERLANG_HOME / bin
export PATH
root @ xjr - pc : / etc / profile . d # source /etc/profile
# 运行erl
root @ xjr - pc : / etc / profile . d # erl
Erlang / OTP 24 [ erts - 12.0 ] [ source ] [ 64 - bit ] [ smp : 16 : 16 ] [ ds : 16 : 16 : 10 ] [ async - threads : 1 ] [ jit ]
Eshell V12 . 0 ( abort with ^ G )
1 > halt () .
root @ xjr - pc : / etc / profile . d #
2.3. 安装RabbitMQ
安装RabbitMQ前需要确认erlang安装成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 解压 rabbitmq-server-generic-unix-3.9.19.tar.xz
root @ xjr - pc : / www / server / src # xz -d rabbitmq-server-generic-unix-3.9.19.tar.xz
root @ xjr - pc : / www / server / src # tar -xvf rabbitmq-server-generic-unix-3.9.19.tar
root @ xjr - pc : / www / server / src # mv rabbitmq-server-generic-unix-3.9.19 /www/server/rabbitmq
# 配置 RabbitMQ 环境变量
root @ xjr - pc : / etc / profile . d # pwd
/ etc / profile . d
root @ xjr - pc : / etc / profile . d # cat rabbitmq.sh
RABBITMQ_HOME =/ www / server / rabbitMQ
PATH =$ PATH : $ RABBITMQ_HOME / sbin
export PATH
root @ xjr - pc : / etc / profile . d # source /etc/profile
# 后台启动RabbitMQ
root @ xjr - pc : / www / server # rabbitmq-server -detached
# 查看端口 5672 存在表示启动成功
root @ xjr - pc : / www / server # netstat -tnlp|grep 5672
LISTEN 0 128 0.0 . 0.0 : 25672 0.0 . 0.0 : * users :(( "beam.smp" , pid = 11688 , fd = 19 ))
LISTEN 0 128 * : 5672 * : * users :(( "beam.smp" , pid = 11688 , fd = 34 ))
# 添加rabbitmq浏览器管理插件
root @ xjr - pc : / www / server # rabbitmq-plugins enable rabbitmq_management
# RabbitMQ有默认用户名密码 guest/guest,该用户名密码只能在本地登陆
# 如若在浏览器中登陆,须新创建用户名密码
# 添加用户名密码
root @ xjr - pc : / www / server # rabbitmqctl add_user root P@ssw0rd
# 检查用户列表
root @ xjr - pc : / www / server # rabbitmqctl list_users
Listing users ...
user tags
guest [ administrator ]
rabbitmq_user []
# 为 root 用户添加administrator角色
root @ xjr - pc : / www / server # rabbitmqctl set_user_tags root administrator
# 设置 root 用户权限,允许访问vhost及read/write
root @ xjr - pc : / www / server # rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
# 检查权限列表
root @ xjr - pc : / www / server # rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user configure write read
guest .* .* .*
root .* .* .*
# 启动消息队列服务
rabbitmqctl start_app
# 验证15672端口存在表示消息队列服务启动成功
ss - tnlp | grep 15672
2.4. Rabbitmq 配置systemctl启动
2.4.1. 编辑service文件
1
vim /lib/systemd/system/rabbitmq.service
2.4.2. 编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#rabbitmq 启动脚本
[ Unit ]
Description = rabbitmq
After = syslog . target network . target
[ Service ]
#Type=forking
User = root
Group = root
WorkingDirectory =/ www / server / rabbitMQ
ExecStart =/ www / server / rabbitMQ / sbin / rabbitmq - server
ExecReload =/ www / server / rabbitMQ / sbin / rabbitmq - server restart
ExecStop =/ www / server / rabbitMQ / sbin / rabbitmq - server stop
PrivateTmp = true
[ Install ]
WantedBy = multi - user . target
2.4.3. 解析
1
2
3
4
5
6
7
8
9
10
Description : 描述服务
After : 描述服务类别
[ Service ] 服务运行参数的设置
Type = forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp = True表示给服务分配独立的临时空间
注意: [ Service ] 的启动、重启、停止命令全部要求使用绝对路径
[ Install ] 运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为 3
2.4.4. 开机启动
1
systemctl enable rabbitmq.service
2.4.5. 错误
运行 systemctl start rabbitmq 一直无法启动,
提示 ’/usr/local/software/rabbitmq/sbin/rabbitmq-server: line 73: exec: erl: not found’?
解决方法:
是因为环境变量不同,导致无法找到相应命令,按照指引将 erlang 的 erl 软连接到 **/usr/bin **目录下,运行以下命令。
1
ln -s $ERLANG_HOME/bin/erl /usr/bin/erl
2.5. 安装RabbitMQ插件
2.5.1. rabbitmq_delayed_message_exchange
作用: 向 RabbitMQ 添加延迟消息(或计划消息)的插件。
github: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
2.5.2. wget 下载插件
1
wget https : // github . com / rabbitmq / rabbitmq-delayed -message-exchange / releases / download / 3.9 . 0 / rabbitmq_delayed_message_exchange - 3.9 . 0 . ez
2.5.3. 拷贝到对应插件目录
1
cp rabbitmq_delayed_message_exchange - 3.9 . 0 . ez / www / server / rabbitMQ / plugins /
2.5.4. 开启插件
1
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
2.5.5. 重启MQ服务
1
systemctl restart rabbitmq-server
Nginx 反向代理 RabbitMQ后台
Nginx 应用说明:
RabbitMQ 后台管理系统占用的的端口是 :**15672 ;**但是如果把 15672 开放出去外网这显然不太安全;
这里采用的是通过 Nginx 把域名是 rabbitmq.XXX.com 的请求反向代理到本地的 **15672 **端口;然后限制对应的访问 IP ;只允许内部 IP 访问;
Nginx 反向代理配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
upstream rabbitmq-web {
server 127.0 . 0 . 1 : 15672 ;
}
server
{
listen 80 ;
server_name rabbitmq-web . xjr2018 . com ;
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 / 404 . html ;
error_page 502 / 502 . html ;
#ERROR-PAGE-END
# if a file, which is not found in the root folder is requested,
location / {
# If you use https make sure you disable gzip compression
# to be safe against BREACH attack
proxy_read_timeout 300 ; # Some requests take more than 30 seconds.
proxy_connect_timeout 300 ; # Some requests take more than 30 seconds.
proxy_redirect off ;
proxy_set_header X-Forwarded -Proto $scheme ;
proxy_set_header Host $http_host ;
proxy_set_header X-Real -IP $remote_addr ;
proxy_set_header X-Forwarded -For $proxy_add_x_forwarded_for ;
proxy_set_header X-Frame -Options SAMEORIGIN ;
proxy_pass http : // rabbitmq-web ;
}
access_log / www / log / nginx / rabbitmq-web . xjr2018 . com . log ;
error_log / www / log / nginx / rabbitmq-web . xjr2018 . com . error . log ;
}
说明: 通过 nginx 反向代理把请求反向代理的本地 15672 端口;
限制 IP
1
2
3
4
5
6
location / {
allow 192.168 . 0 . 1 ;
allow 10.0 . 0 . 0 / 24 ;
allow 2001 : 0db8 ::/ 32 ;
deny all ;
}
说明:只有 IP 地址为 192.168.0.1、10.0.0.0/24 或 2001:0db8::/32 的请求才会被允许访问。其他 IP 地址将被拒绝。
修改 Hosts 文件
1
2
3
vim / etc / hosts
192.168 . 0 . 1 rabbitmq-web . xxx . com
说明:如果没有做域名解析就改hosts文件,如果做IP限制,只用于开发团队使用其实没必要做域名解析(个人看法)
验证
直接访问:
总结
基本完成。。