Jusene's Blog

RabbitMQ 消息型队列中间件(扫盲篇)

字数统计: 1k阅读时长: 4 min
2017/08/10 Share

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. 使用短语格式主机名:解析的名称与每个主机名保持一致

    1
    ~]# cat /etc/hosts
    2
    10.211.55.43 node2
    3
    10.211.55.39 node1
  2. 时间同步

  3. 各个节点启动rabbitmq_management插件

    1
    ~]# rabbitmq-plugins enable rabbitmq_management
  4. 配置过程

在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的扫盲。

CATALOG
  1. 1. RabbitMQ
    1. 1.1. RabbitMQ安装配置
      1. 1.1.1. RabbitMQ 配置方法
    2. 1.2. RabbitMQ Cluster