参考文章:
rabbitmq官网
在linux下安装配置rabbitMQ详细教程
linux安装RabbitMQ
这里可以看到不同版本rabbitmq对erlang版本的要求:
http://www.rabbitmq.com/which-erlang.html
这里可以下载支持rabbitmq的erlang rpm安装包
https://github.com/rabbitmq/erlang-rpm/releases
安装erlang基础包
[root@VMTest soft]# rpm -ivh erlang-21.2.2-1.el7.centos.x86_64.rpm
下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/
这里下载:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm
安装
[root@VMTest soft]# rpm -ivh rabbitmq-server-3.7.9-1.el7.noarch.rpm
安装时如果遇到下面的依赖错误
error: Failed dependencies:
socat is needed by rabbitmq-server-3.7.9-1.el7.noarch
可以尝试先执行
[root@VMTest soft]# yum install socat
安装rabbitmq
[root@VMTest soft]# rpm -ivh rabbitmq-server-3.7.9-1.el7.noarch.rpm
[root@VMTest soft]# service rabbitmq-server status
[root@VMTest soft]# service rabbitmq-server start
[root@VMTest soft]# service rabbitmq-server stop
[root@VMTest soft]# service rabbitmq-server restart
#ps centos7
[root@VMTest soft]# systemctl status rabbitmq-server
[root@VMTest soft]# systemctl start rabbitmq-server
[root@VMTest soft]# systemctl stop rabbitmq-server
[root@VMTest soft]# systemctl restart rabbitmq-server
# 添加开机启动RabbitMQ服务
[root@VMTest ~]# chkconfig rabbitmq-server on
运行命令service rabbitmq-server status可以看到包含rabbitmq的log存储位置的信息输出:
Jan 04 11:05:26 VMTest rabbitmq-server[32790]: ########## Logs: /var/log/rabbitmq/[email protected]
简单的rabbitmq配置可无需配置文件,只有需要定制复杂应用时,才需要用到配置文件。
从默认docs目录复制配置文件样例:
[root@VMTest ~]# cp /usr/share/doc/rabbitmq-server-3.5.3/rabbitmq.config.example /etc/rabbitmq.config
常用配置如下:
tcp_listerners #设置rabbimq的监听端口,默认为[5672]。
disk_free_limit #磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.
vm_memory_high_watermark #设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
hipe_compile #将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。
force_fine_statistics #该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
frame_max #包大小,若包小则低延迟,若包则高吞吐,默认是131072=128K。
heartbeat #客户端与服务端心跳间隔,设置为0则关闭心跳,默认是600秒。
其它可参考:http://www.rabbitmq.com/configure.html#configuration-file
更新配置后,需要重启服务!
默认情况下,RabbitMQ的默认的guest
用户只允许本机访问, 如果想让guest
用户能够远程访问的话,只需要将配置文件中的loopback_users
列表置为空即可,如下:
{loopback_users, []}
另外关于新添加的用户,直接就可以从远程访问。
如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 例如,只允许admin
用户本机访问:
{loopback_users, ["admin"]}
---------------------------------------------------------
使用到的配置:
在指定目录下,创建rabbitmq配置文件
[root@VMTest ~]# cd /etc/rabbitmq/
[root@VMTest ~]# vi rabbitmq.config
编辑添加以下内容:
[{rabbit, [{loopback_users, []}]}].
# 这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,
# 这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。
编辑完成,重启服务即可生效。
RabbitMQ自带了web管理界面,只需要启动插件便可以使用:
[root@VMTest ~]# rabbitmq-plugins enable rabbitmq_management
然后通过浏览器访问
http://localhost:15672
输入用户名和密码访问web管理界面了。(默认用户名: guest, 密码: guest)
# 查看当前所有用户
[root@VMTest ~]# rabbitmqctl list_users
# 查看默认guest用户的权限
[root@VMTest ~]# rabbitmqctl list_user_permissions guest
# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
[root@VMTest ~]# rabbitmqctl delete_user guest
# 添加新用户
[root@VMTest ~]# rabbitmqctl add_user username password
[root@VMTest ~]# rabbitmqctl add_user guest 123abc
# 修改密码
[root@VMTest ~]# rabbitmqctl change_password Username 'Newpassword'
[root@VMTest ~]# rabbitmqctl change_password guest '123abc'
# 设置用户tag
[root@VMTest ~]# rabbitmqctl set_user_tags username administrator
#例如:
[root@VMTest ~]# rabbitmqctl set_user_tags guest administrator
# 赋予用户默认vhost的全部操作权限
[root@VMTest ~]# rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
#例如:
[root@VMTest ~]# rabbitmqctl set_permissions -p / guest".*" ".*" ".*"
# 查看用户的权限
[root@VMTest ~]# rabbitmqctl list_user_permissions username
#例如:
[root@VMTest ~]# rabbitmqctl list_user_permissions guest
1.RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator
2.RabbitMQ各类角色描述:
a. none
不能访问 management plugin
b. management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
c. policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
d. monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
e. administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
#创建管理员用户,负责整个MQ的运维:
[root@VMTest ~]# rabbitmqctl add_user user_admin passwd_admin
#赋予其administrator角色:
[root@VMTest ~]# rabbitmqctl set_user_tags user_admin administrator
#创建RabbitMQ监控用户,负责整个MQ的监控:
[root@VMTest ~]# rabbitmqctl add_user user_monitoring passwd_monitor
#赋予其monitoring角色:
[root@VMTest ~]# rabbitmqctl set_user_tags user_monitoring monitoring
#创建某个项目的专用用户,只能访问项目自己的 virtual hosts
[root@VMTest ~]# rabbitmqctl add_user user_proj passwd_proj
#赋予其monitoring角色:
[root@VMTest ~]# rabbitmqctl set_user_tags user_proj management
#创建和赋角色完成后查看并确认:
[root@VMTest ~]# rabbitmqctl list_users
权限说明1:
默认virtual host:"/"
默认用户:guest
guest具有"/"上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。
可通过将配置文件中loopback_users置空来取消其本地访问的限制:
[{rabbit, [{loopback_users, []}]}]
权限说明2:
#用户仅能对其所能访问的virtual hosts中的资源进行操作。
#这里的资源指的是virtual hosts中的exchanges、queues等, 操作包括对资源进行配置、写、读。
#配置权限可创建、删除、资源并修改资源的行为, 写权限可向资源发送消息, 读权限从资源获取消息。
#比如:
#1. exchange和queue的declare与delete分别需要exchange和queue上的配置权限
#2. exchange的bind与unbind需要exchange的读写权限
#3. queue的bind与unbind需要queue写权限exchange的读权限
#4. 发消息(publish)需exchange的写权限
#5. 获取或清除(get、consume、purge)消息需queue的读权限
#6. 对何种资源具有配置、写、读的权限通过正则表达式来匹配, 具体命令如下:
[root@VMTest ~]# set_permissions [-p ]
#其中, 的位置分别用正则表达式来匹配特定的资源,
#如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange, '^$'不匹配任何资源
#需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、
#因此权限发生变化后需要重连才能生效。
权限的赋权和查看:
#为用户赋权:
[root@VMTest ~]# rabbitmqctl set_permissions -p /vhost1 user_admin '.*' '.*' '.*'
#该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
#查看权限:
[root@VMTest ~]# rabbitmqctl list_user_permissions user_admin
Listing permissions for user "user_admin" ...
/vhost1 .*
.* .*
[root@VMTest ~]# rabbitmqctl list_permissions -p /vhost1
Listing permissions in vhost "/vhost1" ...
user_admin .*
.* .*