一、RabbitMQ简单介绍
RabbitMQ就是当前最主流的消息中间件之一。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
在目前分布式的大环境下,成为非常常用的消息队列,以下详细说明怎么在centos7 上安装部署rabbitmq,并列举简单的维护,方便运维同学能更好的维护rabbitmq的正常运行。由于一般生产环境,不管是erlang还是 rabbitmq都不能随便进行版本升级,每次升级都是要谨慎的,所以这里推荐都使用源码安装,这样就固定了版本,不会出现通过yum安装的话,不小心升级了版本导致服务故障等的问题。当然yum安装会更简单,这里就不做介绍,有兴趣的参考官方文档即可。
二、Rabbit安装
1、安装准备
版本对照
安装之前,需要去官网查看一下rabbitmq版本对erlang版本的一个支持情况,官网地址:http://www.rabbitmq.com/which-erlang.html
这里我用的3.9.5
Rabbit安装包下载
在官网上,直接下载该版本的安装包,为了方便安装,最好直接使用编译好的二进制文件包,即开即用,不用进行复杂的yum配置等。具体可以参考官方文档:http://www.rabbitmq.com/install-generic-unix.html
2、erlang安装
#解压到:/usr/local/server
tar -zxvf otp_src_24.2.tar.gz -C /usr/local/server
#这里要新建一个erlang文件夹,因为erlang编译安装默认是装在/usr/local下的bin和lib中,这里我们将他统一装到/usr/local/server/erlang中,方便查找和使用。
mkdir /usr/local/server/erlang
# 在编译之前,必须安装以下依赖包
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel
#进入解压的otp_src_24.2中
cd /usr/local/server/otp_src_24.2/
#配置erlang的安装路径
./configure --prefix=/usr/local/server/erlang
#直接执行make && make install 进行编译安装
make && make install
安装后,在 /usr/local/server/erlang 中就会出现.
# 配置环境变量,添加下列配置
vi /etc/profile
# ERLANG_HOME=/usr/local/server/erlang
# export PATH=$PATH:$ERLANG_HOME/bin
# export ERLANG_HOME
#刷新环境变量
source /etc/profile
测试是否安装成功:erl 进入 halt().退出
3、RabbitMQ安装
解压安装
#解压安装包到 /usr/local/server/
tar -xvf rabbitmq-server-generic-unix-3.9.5.tar.xz -C /usr/local/server/
#修改环境变量
vi /etc/profile
#添加配置
export PATH=$PATH:/usr/local/server/rabbitmq_server-3.9.5/sbin
#刷新环境变量
source /etc/profile
rabbit.config添加
默认rabbitmq是没有配置文件的,需要去官方github上,复制一个配置文件模版过来。添加rabbit.config 文件,官网样例地址,并复制rabbitmq.conf.example官方提供的样例文件。
这里我把复制的内容保存到Rabbit的安装目录/etc/rabbitmq下,如:/usr/local/server/rabbitmq_server-3.9.5/etc/rabbitmq
服务启动准备(云服务器忽略)
#添加web管理插件
rabbitmq-plugins enable rabbitmq_management
#启动rabbit服务
rabbitmq-server -detached
#防火墙端口(5672和15672端口)
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload #重启防火墙
http://192.168.1.47:15672/#/
使用默认的用户 guest / guest (此也为管理员用户)登陆,会发现无法登陆,报错:User can only log in via localhost。那是因为默认是限制了guest用户只能在本机登陆,也就是只能登陆localhost:15672。可以通过修改配置文件rabbitmq.conf,取消这个限制: loopback_users这个项就是控制访问的,如果只是取消guest用户的话,只需要loopback_users.guest = false ,服务重启后就可以登入。
三、常用命令
#服务启动停止:
rabbitmq-server -detached #启动
service rabbitmq-server restar #重启
rabbitmqctl stop #停止
rabbitmqctl status #查看状态
#插件管理:
rabbitmq-plugins list #插件列表
rabbitmq-plugins enable {XXX} #启动插件(XXX为插件名)
rabbitmq-plugins disable {XXX} #停用插件
#用户管理:
rabbitmqctl add_user {username} {password} #添加用户
rabbitmqctl delete_user {username} #删除用户
rabbitmqctl change_password {username} {newpassword} #修改密码
#设置用户角色,user有5种 tags :
# management :访问 management plugin;
# policymaker :访问 management plugin 和管理自己 vhosts 的策略和参数;
# monitoring :访问 management plugin 和查看所有配置和通道以及节点信息;
# administrator :一切权限;
# None :无配置
rabbitmqctl set_user_tags {username} {tag}
rabbitmqctl list_users #列出用户
#权限管理
rabbitmqctl list_permissions #列出所有用户权限
rabbitmqctl list_user_permissions {username} #查看制定用户权限
rabbitmqctl clear_permissions [-p vhostpath] {username} #清除用户权限
rabbitmqctl set_permissions [-p vhostpath] {username} conf write read #设置用户权限
# conf: 一个正则匹配哪些资源能被该用户访问
# write:一个正则匹配哪些资源能被该用户写入
# read:一个正则匹配哪些资源能被该用户读取