RabbitMQ

RabbitMQ

安装

RabbitMQ Erlang 版本要求
下载地址:ErlangRabbitMQRabbitMQ github
github

安装Windows版本:

先安装Erlang,再安装RabbitMQ-Server,一路下一步即可。

开始菜单打开:RabbitMQ Server -> RabbitMQ Command Prompt (sbin dir)

安装Linux版本(yum安装)

yum install socat logrotate -y
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y

启动

chkconfig rabbitmq-server on
service rabbitmq-server start
service rabbitmq-server status
service rabbitmq-server stop

安装Linux版本(源码安装)

yum -y install ncurses-devel openssl-devel

# 安装Erlang:otp_src_19.3.tar.gz
cd /usr/local
tar xvzf otp_src_*.tar.gz
cd otp_src_*
./configure --prefix=/usr/local/erlang
make
make install

ln -s /usr/local/erlang/bin/erl /usr/local/bin/erl

# 安装Python
yum -y install python

# 安装simplejson
yum -y install xmlto
yum -y install python-simplejson

# 安装RabbitMQ-Server
cd /usr/local
tar -xvf rabbitmq-server-generic-unix-*.tar.xz
cd rabbitmq_server-*/

echo 'export PATH=$PATH:/home/jzinfo/software/rabbitmq_server-3.7.26/sbin' >> /etc/profile
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
. /etc/profile

后台启动

rabbitmq-server -detached

用户、权限配置

# 启动后台管理
rabbitmq-plugins enable rabbitmq_management

# 默认网页guest用户是不允许访问的,需要增加一个用户修改一下权限
# 列出用户:
rabbitmqctl list_users

# 添加用户:
rabbitmqctl add_user admin admin

# 添加权限:
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

#修改用户角色:
rabbitmqctl set_user_tags admin administrator

#删除用户:
rabbitmqctl delete_user guest

网页

http://localhost:15672/,默认的账户和密码均是 guest

常用操作

启用web管理插件: rabbitmq-plugins enable rabbitmq_management

rabbitmqctl list_queues:查看所有队列信息
rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)
rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的
rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)
rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段
rabbitmqctl status:节点状态

插件管理:
插件列表: rabbitmq-plugins list
启动插件: rabbitmq-plugins enable XXX   (XXX为插件名)
停用插件: rabbitmq-plugins disable XXX

用户管理:
列出用户: rabbitmqctl list_users
添加用户: rabbitmqctl add_user username password
删除用户: rabbitmqctl delete_user username
修改密码: rabbitmqctl change_password username newpassword
设置用户角色: rabbitmqctl set_user_tags username tag

权限管理:
列出所有用户权限: rabbitmqctl list_permissions
查看制定用户权限: rabbitmqctl list_user_permissions username
清除用户权限: rabbitmqctl clear_permissions [-p vhostpath] username
设置用户权限: rabbitmqctl set_permissions [-p vhostpath] username conf write read
                                     Vhostpath:虚拟主机,表示该用户可以访问那台虚拟主机
                                     user:用户名
                          conf: 一个正则匹配哪些资源能被该用户访问
                          write:一个正则匹配哪些资源能被该用户写入
                          read:一个正则匹配哪些资源能被该用户读取

用户的角色说明
management:用户可以访问管理插件
policymaker:用户可以访问管理插件,并管理他们有权访问的vhost的策略和参数。
monitoring:用户可以访问管理插件,查看所有连接和通道以及与节点相关的信息。
administrator:用户可以做任何监视可以做的事情,管理用户,vhost和权限,关闭其他用户的连接,并管理所有vhost的政策和参数。

虚拟主机
默认的用户和队列都是在/虚拟机下。

创建一个虚拟主机
rabbitmqctl add_vhost vhost_name
删除一个虚拟主机
rabbitmqctl delete_vhost vhost_name
列出所有虚拟主机
rabbitmqctl list_vhosts

管理界面介绍
Overview:用来显示流量,端口,节点等信息,以及修改配置文件;
Connections:显示所有的TCP连接;
channels:显示所有的信道连接;
exchanges:显示所有的交换机以及创建删除等;
queues:显示所有的队列以及创建删除等;
admins:显示所有的用户以及用户管理;

端口

4369 -- erlang发现口
5672 --client端通信口
15672 -- 管理界面ui端口
25672 -- server间内部通信口

防火墙

iptables -L INPUT

iptables -I INPUT -p tcp --dport  5672 -j ACCEPT
iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
iptables -I INPUT -p tcp --dport 25672 -j ACCEPT

iptables -L INPUT

问题

通过log查看配置文件位置

head -n 20 ../../var/log/rabbitmq/rabbit\@jd-ticket-mq.log

修改配置,要后面的逗号要删除

%% {vm_memory_high_watermark, 0.4},

{vm_memory_high_watermark, 0.4}

在启动 rabbitmq-server 时报错:

2018-01-03 06:16:32.494 [info] <0.33.0> Application lager started on node rabbit@ubuntu
2018-01-03 06:16:32.507 [info] <0.5.0> Log file opened with Lager
2018-01-03 06:16:33.438 [error] <0.5.0>
Error description:
    init:do_boot/3
    init:start_em/1
    rabbit:start_it/1 line 454
    rabbit:broker_start/0 line 330
    rabbit_plugins:prepare_plugins/1 line 289
    rabbit_plugins:ensure_dependencies/1 line 263
throw:{error,{missing_dependencies,[crypto,ssl],
                                   [amqp10_client,cowboy,cowlib,rabbitmq_aws,
                                    rabbitmq_management,
                                    rabbitmq_management_agent,rabbitmq_shovel,
                                    rabbitmq_trust_store]}}
Log file(s) (may contain more information):
   /home/zhangcs/rabbitmq_server-3.7.2/var/log/rabbitmq/rabbit@ubuntu.log
   /home/zhangcs/rabbitmq_server-3.7.2/var/log/rabbitmq/rabbit@ubuntu_upgrade.log

进入Erlang后使用命令 ssl:versions(). 检查当前SSL版本

zhangcs@ubuntu:~/rabbitmq_server-3.7.2$ erl
Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [kernel-poll:false]

Eshell V9.1  (abort with ^G)
1> ssl:versions().
** exception error: undefined function ssl:versions/0
2> halt().

需要安装 openssl-devel

yum -y install openssl-devel

在使用 rabbitmqctl 命令时报错:

Error: unable to perform an operation on node 'rabbit@rabbitmq-1'. Please see diagnostics information and suggestions below.

vi /etc/hosts
127.0.0/1   rabbitmq-1