最近要写一个python的小项目其中涉及了很多系统,需要各个系统之间进行通信,查了一些资料,请教了一些人,最终选用了RabbitMQ
测试环境:CentOS7,root账户
1.更新系统
yum -y update && yum -y upgrade
2.安装所需要的依赖环境
yum -y install gcc make wget xmlto perl ncurses-devel zip unzip
3.安装Erlang语言环境,这里选择源代码安装
1).下载Erlang源代码
cd /tmp/ && wget http://erlang.org/download/otp_src_17.1.tar.gz && tar -zxvf otp_src_17.1.tar.gz
2).编译安装
cd /tmp/otp_src_17.1 && bash configure && make && make install
3).测试erl是否可用
whereis erl
会显示
erl: /usr/local/bin/erl
4.安装RabbitMQ
1).下载RabbitMQ
cd /tmp/ && wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4.tar.gz
2).解压
cd /tmp/ && tar -zxvf rabbitmq-server-3.3.4.tar.gz && cd rabbitmq-server-3.3.4.tar.gz
3).make
cd /tmp/rabbitmq-server-3.3.4 && make TARGET_DIR=/usr/rabbitmq3.3.4 SBIN_DIR=/usr/rabbitmq3.3.4/sbin MAN_DIR=/usr/rabbitmq3.3.4/man DOC_INSTALL_DIR=/usr/rabbitmq3.3.4/doc
4).make install
cd /tmp/rabbitmq-server-3.3.4 && make TARGET_DIR=/usr/rabbitmq3.3.4 SBIN_DIR=/usr/rabbitmq3.3.4/sbin MAN_DIR=/usr/rabbitmq3.3.4/man DOC_INSTALL_DIR=/usr/rabbitmq3.3.4/doc install
5.后续工作
echo "export PATH=\$PATH:/usr/rabbitmq/sbin" >> /etc/profile
source /etc/profile
或者这个操作
ln -s /usr/rabbitmq3.3.4/ /usr/rabbitmq
ln -s /usr/rabbitmq/sbin/rabbitmq-server /usr/sbin/
ln -s /usr/rabbitmq/sbin/rabbitmq-plugins /usr/sbin/
ln -s /usr/rabbitmq/sbin/rabbitmqctl /usr/sbin/
ln -s /usr/rabbitmq3.3.4/sbin/rabbitmq-env /usr/sbin/
6.配置
1).开启web管理
rabbitmq-plugins enable rabbitmq_management
如果提示
Error: {cannot_write_enabled_plugins_file,”/etc/rabbitmq/enabled_plugins”,
enoent}
则进行如下操作
mkdir /etc/rabbitmq/
打开浏览器访问http://{ip}:15672
7.管理
1). 服务器启动与关闭
启动服务
nohup rabbitmq-server >>/dev/null &
#或者rabbitmq-server –detached
关闭服务
rabbitmqctl stop
注意:单机有多个实例,则在rabbitmqctlh后加–n 指定名称
2). 插件管理
开启某个插件:rabbitmq-pluginsenable xxx
关闭某个插件:rabbitmq-pluginsdisablexxx
注意:重启服务器后生效。
3).virtual_host管理
新建virtual_host: rabbitmqctl add_vhost xxx
撤销virtual_host:rabbitmqctl delete_vhost xxx
4). 用户管理
RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator
RabbitMQ各类角色描述:
none
不能访问 management plugin
management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
用户操作
新建用户:rabbitmqctl add_user user_admin passwd_admin
删除用户: rabbitmqctl delete_user xxx
列出用户:rabbitmqctl list_users
改密码: rabbimqctl change_password {username} {newpassword}
设置用户角色:rabbitmqctl set_user_tags {username} {tag ...}
Tag可以为 administrator,monitoring, management
eg.
赋予其administrator角色rabbitmqctl set_user_tags user_admin administrator
创建RabbitMQ监控用户,负责整个MQ的监控rabbitmqctl add_user user_monitoring passwd_monitor
赋予其monitoring角色:rabbitmqctl set_user_tags user_monitoring monitoring
5). 权限管理
权限设置:rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
Vhostpath Vhost路径
user 用户名
Conf 一个正则表达式match哪些配置资源能够被该用户访问。
Write 一个正则表达式match哪些配置资源能够被该用户读。
Read 一个正则表达式match哪些配置资源能够被该用户访问。
权限查看rabbitmqctl list_user_permissions {username}
如查看guets权限:rabbitmqctl list_user_permissions guest
6). 获取服务器状态信息
服务器状态:rabbitmqctl status
队列信息:rabbitmqctl list_queues[-p vhostpath] [queueinfoitem ...]
Queueinfoitem可以为:name,durable,auto_delete,arguments,messages_ready,
messages_unacknowledged,messages,consumers,memory
Exchange信息:rabbitmqctl list_exchanges [-p vhostpath] [exchangeinfoitem ...]
Exchangeinfoitem有:name,type,durable,auto_delete,internal,arguments.
Binding信息:rabbitmqctl list_bindings [-p vhostpath] [bindinginfoitem ...]
Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments
Connection信息:rabbitmqctl list_connections [connectioninfoitem ...]
Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
Channel信息:rabbitmqctl list_channels [channelinfoitem ...]
Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked
8.配置文件
一般情况下,RabbitMQ的默认配置就足够了。如果希望特殊设置的话,有两个途径:
一个是环境变量的配置文件 rabbitmq-env.conf ;
一个是配置信息的配置文件 rabbitmq.config;
注意,这两个文件默认是没有的,如果需要必须自己创建。
rabbitmq-env.conf
这个文件的位置是确定和不能改变的,位于:/etc/rabbitmq目录下(这个目录需要自己创建)。
文件的内容包括了RabbitMQ的一些环境变量,常用的有:
RABBITMQ_NODE_PORT= //端口号
HOSTNAME=
RABBITMQ_NODENAME=mq
RABBITMQ_CONFIG_FILE= //配置文件的路径
RABBITMQ_MNESIA_BASE=/rabbitmq/data //需要使用的MNESIA数据库的路径
RABBITMQ_LOG_BASE=/rabbitmq/log //log的路径
RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins //插件的路径
具体的列表见:http://www.rabbitmq.com/configure.html#define-environment-variables
rabbitmq.config
这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。
它既有默认的目录,也可以在rabbitmq-env.conf文件中配置。
文件的内容详见:http://www.rabbitmq.com/configure.html#config-items
附录:自己写了一个Dockerfile 感觉没有docker hub上的好。特意把docker hub上的链接发一下,如果机器上安装的docker可以直接pull下来
链接https://github.com/docker-library/rabbitmq
docker pull rabbitmq
启动
docker run -d -p 4369:4369 --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 25672:25672 rabbitmq
带有web管理的rabbitmq
docker pull rabbitmq:management
运行
docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 25672:25672 -p 15671:15671 -p 15672:15672 --restart=always --name rabbitmq rabbitmq:management
参考:http://blog.csdn.net/mlks_2008/article/details/18988301
http://blog.csdn.net/zyz511919766/article/details/42292655
http://www.cnblogs.com/astroboyx/archive/2012/04/09/2739902.html