RabbitMQ
学习RabbitMQ,首先需要了解的是AMQP,即高级队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP的主要特征是面向消息,队列,路由(包括点对点的发布/订阅),可靠性,安全。
RabbitMQ是一个开源的AMQP实现,服务器端由Erlang语言编写,支持多种客户端,如:Python、Ruby、Java、PHP等,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbiMQ的基础概念介绍:http://blog.csdn.net/whycold/article/details/41119807 感觉写的不错。
RabbitMQ安装配置
epel源安装: yum install -y rabbitmq-server
插件管理:
1 | ~]# rabbitmq-plugins list |
2 | [e] amqp_client 3.3.5 |
3 | [ ] cowboy 0.5.0-rmq3.3.5-git4b93c2d |
4 | [ ] eldap 3.3.5-gite309de4 |
5 | [e] mochiweb 2.7.0-rmq3.3.5-git680dba8 |
6 | [ ] rabbitmq_amqp1_0 3.3.5 |
7 | [ ] rabbitmq_auth_backend_ldap 3.3.5 |
8 | [ ] rabbitmq_auth_mechanism_ssl 3.3.5 |
9 | [ ] rabbitmq_consistent_hash_exchange 3.3.5 |
10 | [ ] rabbitmq_federation 3.3.5 |
11 | [ ] rabbitmq_federation_management 3.3.5 |
12 | [E] rabbitmq_management 3.3.5 |
13 | [e] rabbitmq_management_agent 3.3.5 |
14 | [ ] rabbitmq_management_visualiser 3.3.5 |
15 | [ ] rabbitmq_mqtt 3.3.5 |
16 | [ ] rabbitmq_shovel 3.3.5 |
17 | [ ] rabbitmq_shovel_management 3.3.5 |
18 | [ ] rabbitmq_stomp 3.3.5 |
19 | [ ] rabbitmq_test 3.3.5 |
20 | [ ] rabbitmq_tracing 3.3.5 |
21 | [e] rabbitmq_web_dispatch 3.3.5 |
22 | [ ] rabbitmq_web_stomp 3.3.5 |
23 | [ ] rabbitmq_web_stomp_examples 3.3.5 |
24 | [ ] sockjs 0.3.4-rmq3.3.5-git3132eb9 |
25 | [e] webmachine 1.10.3-rmq3.3.5-gite9359c7 |
26 | 这里已经启动了rabbitmq_management,这个插件会监听15672端口,并提供一个web界面管理的页面 |
27 | ~]# rabbitmq-plugins enable rabbitmq_management |
可以通过web界面管理rabbitmq-server
rabbitmq-server会监听端口:tcp/5672
rabbitmq-cluster会监听端口:tcp/25672
RabbitMQ 配置方法
- 环境变量:网络参数及配置文件路径
- 配置文件:服务器组件访问权限、资源限制、插件及集群
- 运行时参数:服务的运行时参数
环境变量:/etc/rabbitmq/rabbitmq-env.conf
- RABBITMQ_BASE:数据库与日志
- RABBITMQ_CONFIG_FILE:配置文件路径
- RABBITMQ_LOGS:
- RABBITMQ_NODE_IP_ADDRESS:监听的ip
- RABBITMQ_NODE_PORT:监听的端口
- RABBITMQ_PLUGINS_DIR:
配置文件:
- auth_mechanisms:认证机制,SASL
- default_user:guest
- default_pass:guest
- default_permission:
- disk_free_limit
- heartbeat
- hipe_compile
- log_levels:{none|error|warning|info}
- tcp_listeners:监听的地址和端口
- ssl_listeners:基于ssl通信协议监听的地址和端口
- vm_memory_high_watermark:内存高水位标记
运行参数:rabbitmqctl
用户管理
1
add_user <username> <password>
2
delete_user <username>
3
change_password <username> <newpassword>
4
clear_password <username>
5
set_user_tags <username> <tag> ...
6
list_users
虚拟主机
1
add_vhost <vhostpath>
2
delete_vhost <vhostpath>
3
list_vhosts [<vhostinfoitem> ...]
权限管理
1
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
2
clear_permissions [-p <vhostpath>] <username>
3
list_permissions [-p <vhostpath>]
4
list_user_permissions <username>
组件查看命令
1
list_queues [-p <vhostpath>] [<queueinfoitem> ...]
2
list_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...]
3
list_bindings [-p <vhostpath>] [<bindinginfoitem> ...]
4
list_connections [<connectioninfoitem> ...]
5
list_channels [<channelinfoitem> ...]
6
list_consumers [-p <vhostpath>]
broker状态查看:
status
环境变量查看:
environment
系统报告:
report
erlang底层表达式
eval{expr}
关闭指定连接:
close_connection {connectionpid} {explanation}
设定内存高水位标记:
set_vm_memory_high_watermark {fraction}
- 其他设置参数命令
1
set_parameter [-p <vhostpath>] <component_name> <name> <value>
2
clear_parameter [-p <vhostpath>] <component_name> <key>
3
4
set_policy [-p <vhostpath>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
5
clear_policy [-p <vhostpath>] <name>
6
7
set_vm_memory_high_watermark <fraction>
基本无需要修改配置文件,直接启动即可。
1 | ~]# systemctl start rabbitmq-server.service |
RabbitMQ Cluster
使用短语格式主机名:解析的名称与每个主机名保持一致
1
~]# cat /etc/hosts
2
10.211.55.43 node2
3
10.211.55.39 node1
时间同步
各个节点启动rabbitmq_management插件
1
~]# rabbitmq-plugins enable rabbitmq_management
配置过程
在master节点,复制cookie至各个节点,要保持权限为400
1 | ~]# scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/ |
在各个子节点
1 | ~]# rabbitmqctl stop_app |
2 | Stopping node rabbit@node2 ... |
3 | ...done. |
4 | ~]# rabbitmqctl join_cluster rabbit@node1 |
5 | Clustering node rabbit@node2 with rabbit@node1 ... |
6 | ...done. |
7 | ~]# rabbitmqctl start_app |
8 | Starting node rabbit@node2 ... |
9 | ...done. |
10 | ~]# rabbitmqctl cluster_status |
11 | Cluster status of node rabbit@node2 ... |
12 | [{nodes,[{disc,[rabbit@node1,rabbit@node2]}]}, |
13 | {running_nodes,[rabbit@node1,rabbit@node2]}, |
14 | {cluster_name,<<"rabbit@node1">>}, |
15 | {partitions,[]}] |
16 | ...done. |
RabboitMQ 是常用的broker,但是我在工作过程中还是较少见到的,而尝尝使用redis来使用broker,但是十年消息队列中间件RabbitMQ一定有过人之处,还待发现,因为这里的客户端需要编程调用实现,这里只是对RabbitMQ的扫盲。