本文主要演示如何在CentOS(我使用的是6.5 32位)上安装RabbitMQ Server。参考自RabbitMQ官网 http://www.rabbitmq.com/install-rpm.html
RabbitMQ是基于Erlang开发的,所以在安装RabbitMQ之前,需要先安装Erlang。RabbitMQ官网提供了三种Erlang安装包资源,这里使用第三种方式,从EPEL(Extra Packages for Enterprise Linux)安装。
开启EPEL仓库(以CentOS 6.x 32位为例):
[root@bogon installpackages]# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@bogon installpackages]# rpm -ivh epel-release-6-8.noarch.rpm
然后安装erlang:
[root@bogon installpackages]# yum install erlang
在安装erlang之后,就可以下载RabbitMQ Server安装包开始安装了:
[root@bogon installpackages]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.4/rabbitmq-server-3.5.4-1.noarch.rpm
[root@bogon installpackages]# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
[root@bogon installpackages]# yum install rabbitmq-server-3.5.4-1.noarch.rpm
启动(停止)RabbitMQ Server:
[root@bogon sbin]# /sbin/service rabbitmq-server start/(stop)
安装好RabbitMQ之后,默认已经创建了一个用户名和密码都是guest的用户。默认情况下,guest用户被禁止远程连接到MQ,只能在host设置为localhost时可以访问。新创建的用户不会有这个限制。
修改rabbitmq.config使guest用户可远程登录
rabbitmq可以手动创建两个配置文件:rabbitmq.config和rabbitmq-env.conf,前者用来配置RabbitMQ核心应用、Erlang服务和RabbitMQ插件,后者用来配置非windows系统的环境变量(http://www.rabbitmq.com/configure.html#configuration-file);
默认情况下,这两个配置文件不会被创建,但是一旦创建就会被期望放置在以下目录(CentOS系统下):/etc/rabbitmq/;
如果rabbitmq-env.conf不存在,可以手动创建,但只能存放在/etc/rabbitmq目录下,Windows下不需要rabbit-env.conf;
如果rabbitmq.conf不存在,可以手动创建。如果你想修改它的位置,需要设置RABBITMQ_CONFIG_FILE环境变量;Erlang Runtime会在这个环境变量的值后面追加.conf后缀名;
改动配置文件后要重启Server;
RabbitMQ Server提供了一个rabbitmq.config的示例rabbitmq.config.example,里面包含了大多数常用的配置项,在CentOS中的位置是/usr/share/doc/rabbitmq-server-3.5.4里面;
rabbitmq.config里有个loopback_users变量,用来设置只能通过localhost连接到mq的用户列表,默认是guest:{loopback_users, [<<”guest”>>]} ;如果期望guest用户可以远程登录,可以设置为:{loopback_users, []}。
使用rabbitmqctl管理用户
通常情况下,我们会新建一个用户,而非使用guest。这需要用到rabbitmqctl:一个用来管理RabbitMQ的命令行工具(参考
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html#)。rabbitmqctl对于用户管理方面常用的命令有:
1)新增用户:add_user {username} {password} ,例如增加用户名叫tony,密码是123的用户:
[root@bogon ~]# rabbitmqctl add_user tony 123
2)删除用户: delete_user {username} ,比如删除刚才创建的tony:
[root@bogon ~]# rabbitmqctl delete_user tony
3)更改密码:change_password {username} {newpassword}
[root@bogon ~]# rabbitmqctl change_password tony 123456
4)设置tag: set_user_tags {username} {tag…} ,比如设置tony用户为管理员:
[root@bogon ~]# rabbitmqctl set_user_tags tony administrator
备注:成为管理员的tony才能具有登录UI的权限,但并不具备Virtual Hosts的权限,在UI下就可以看到:
点击tony,设置Can access virtual hosts的权限为/,才能在程序中使用tony用户连接rabbitmq,否则会报出错误:java.net.SocketException: Connection reset。
移除tony的所有tag:
[root@bogon ~]# rabbitmqctl set_user_tags tony
5)列出所有用户
[root@bogon ~]# rabbitmqctl list_users
使用RabbitMQ自带的用户监视界面
RabbitMQ自带了rabbitmq-management插件,提供基于Http协议的API来管理和监视RabbitMQ Server,与其一起的有基于浏览器的用户界面和一个命令工具rabbitmqadmin。
该插件已经存在于rabbitmq中,我们需要启用它:
[root@bogon ~]# rabbitmq-plugins enable rabbitmq_management
启用之后,在浏览器地址栏输入:http://192.168.73.128:15672/(UI的默认位置是http://server-name:15672/)进入登录页,用刚刚创建的tony用户登录后就可以看到监视界面了。
下面这幅图是在连续发布三条消息而且未开启消息接收程序的情况下产生的。显示在17:26:10至17:26:30之间,队列中未处理的消息不断增加至三条;下图显示在该时间段内生产者发布消息到队列的频率(黄色)。
下面这幅图展示了开启消息接收程序后,在17:27:00左右,队列中积存的消息数目下降为0,Message rates的蓝色线表示传送给消费者的频率。