安装

  1. 安装好erlang环境
sudo apt-get install erlang erlang-dev
  1. 下载rabbitmq

Download

解压到你想要存放的目录,例如~/rabbitmq/

rabbitmq 的管理

配置好环境变量

RABBITMQ_HOME="/ihome/rabbitmq/rabbitmq_server-3.6.1"

配置文件位置

默认情况下,以下两个文件是不存在的。有需要的话,可以自行创建一个.

  • 环境变量的配置文件$RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf
  • 属性的配置文件在$RABBITMQ_HOME/etc/rabbitmq/rabbitmq.config

当然,如果想要改为像apt-get install时的目录构架,也可以在$RABBITMQ_HOME/sbin/rabbitmq-defaults文件里,修改以下的内容:

SYS_PREFIX=${RABBITMQ_HOME}
修改为
SYS_PREFIX=

即去掉这个前缀即可.

通过这个文件$RABBITMQ_HOME/sbin/rabbitmq-defaults也可以了解到MQ的加载文件的位置。

注意,这样子修改完之后,MQ查找的配置文件位置就是/etc/rabbitmq/目录下了,而不是原来的$RABBITMQ_HOME/etc/rabbitmq/了,因为删除了这个前缀.

rabbitmq-env.conf 文件配置

这个文件的特点是:在外部环境变量的,并且是以RABBITMQ_开头的环境变量名,在这个文件里就对应为去掉这个前缀的环境变量名。例如,在命令行里,如果有个外部环境变量,名为 RABBITMQ_NODENAME=xxx,就对应这个文件的变量名NODENAME=xxx,即等同于这个文件的内容为:

NODENAME=xxx

RabbitMQ的环境变量列表

例如,如果想修改监听的指定IP,则可以添加以下内容到这个env文件里:
NODE_IP_ADDRESS=192.168.1.10

如果想监听2个或以个的IP,则需要在rabbitmq.config文件的tcp_listeners键里修改.内容类似如下:

{tcp_listeners, [{"127.0.0.1",5672},{"192.168.20.18",5672}]}, 
修改监听的端口

rabbitmq-env.conf文件里添加:

NODE_PORT=5672
修改节点名字

rabbitmq-env.conf文件里添加

NODENAME=hello
rabbitmq 获取变量的顺序
  1. 如果SHELL环境有一个名为RABBITMQ_var_name的变量名,那就使用这个.

  2. 否则如果在rabbitmq-env.conf里有一个名为var_name的变量名,那就使用这个.

  3. 最后则在系统级获取这默认值.

rabbitmq.config 文件配置

RabbitMQ rabbitmq.config配置项列表

RabbitMQ rabbitmq.config配置文件示例

比如,修改监听端口:

[
    {rabbit, [{tcp_listeners, [5673]}]}
  ].

注意,最后还有一个英文句号.

全系列安装方式的配置文件位置列表

  • Generic UNIX - $RABBITMQ_HOME/etc/rabbitmq/
  • Debian - /etc/rabbitmq/
  • RPM - /etc/rabbitmq/
  • Mac OS X (Homebrew) - ${install_prefix}/etc/rabbitmq/, the Homebrew prefix is usually /usr/local
  • Windows - %APPDATA%\RabbitMQ

默认的MQ使用端口情况

  • 4369 (epmd), 25672 (Erlang distribution)
  • 5672, 5671 (AMQP 0-9-1 without and with TLS)
  • n15672 (if management plugin is enabled)
  • 61613, 61614 (if STOMP is enabled)
  • 1883, 8883 (if MQTT is enabled)

默认的用户名和密码

默认的用户名为:guest 默认的密码为:guest

rabbitmq3.3.0开始禁止使用guest/guest权限通过除localhost外的访问

启动

非守护进程启动

$RABBITMQ_HOME/sbin/rabbitmq-server

以守护进程启动

$RABBITMQ_HOME/sbin/rabbitmq-server -detached


如果成功的话,它会显示类似以下的信息:

completed with [n] plugins

停止

$RABBITMQ_HOME/sbin/rabbitmqctl stop

查看状态

$RABBITMQ_HOME/sbin/rabbitmqctl status

与项目结合配置

  1. 添加一个vhost: rabbitmqctl add_vhost /project_name
  2. 添加一个用户: rabbitmqctl add_user project_user_name project_user_passwd
  3. 添加权限: rabbitmqctl set_user_tags project_user_name management
  4. 开启web控制台: rabbitmq-plugins enable rabbitmq_management
  5. 设置用户访问vhost权限: rabbitmqctl set_permissions -p /project_name project_user_name ".*" ".*" ".*"

多实例管理

实例node1的配置文件node1.config内容为:

[
  {rabbit,                    [ {tcp_listeners,               [5674]},
                                {collect_statistics_interval, 10000} ] },
  {rabbitmq_management,       [{listener, [{port, 12345}]}] }
].

实例node2的配置文件node2.config内容为:

[
  {rabbit,                    [ {tcp_listeners,               [5674]},
                                {collect_statistics_interval, 10000} ] },
  {rabbitmq_management,       [{listener, [{port, 12345}]}] }
].

启动多实例

启动实例1:

RABBITMQ_CONFIG_FILE=/ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq/node1 RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=node1 /ihome/rabbitmq/rabbitmq_server-3.6.1/sbin/rabbitmq-server -detached

启动实例2: RABBITMQ_CONFIG_FILE=/ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq/node2 RABBITMQ_NODE_PORT=5675 RABBITMQ_NODENAME=node2 /ihome/rabbitmq/rabbitmq_server-3.6.1/sbin/rabbitmq-server -detached

启动完毕,就可以看到以下端口都在监听了

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq  
╰─➤  lsof -i:12346
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
beam.smp 22069  sky   46u  IPv4 14451143      0t0  TCP *:12346 (LISTEN)

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq  
╰─➤  lsof -i:12345
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
beam.smp 21828  sky   46u  IPv4 14447989      0t0  TCP *:12345 (LISTEN)

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq  
╰─➤  lsof -i:5674 
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
beam.smp 21828  sky   45u  IPv6 14445397      0t0  TCP *:mrtd (LISTEN)

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq  
╰─➤  lsof -i:5675
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
beam.smp 22069  sky   45u  IPv6 14451141      0t0  TCP *:bgpsim (LISTEN)

它们web界面管理地址如下:

node1 http://localhost:12345/#/

node 2http://localhost:12346/#/

因为默认情况下,guest只能通过localhost访问,要想远程访问,最好添加一个远程访问用户,以减小权限的导致的问题.

查看节点状态

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1  
╰─➤  ./sbin/rabbitmqctl -n node1 status
Status of node 'node1@sky-linux' ...
[{pid,21828},
 {running_applications,
 ...

即在rabbitmqctl -n 节点名 status即可.

其他的操作,跟单节点时没什么区别,多节点时,只需要记得加上-n 节点名即可.

停止某节点

╭─sky@sky-linux /ihome/rabbitmq/rabbitmq_server-3.6.1  
╰─➤  ./sbin/rabbitmqctl -n node1 stop  
Stopping and halting node 'node1@sky-linux' ...

关于RabbitMQ的集群,目前还没有这种需求,所以也就没有继续深入了.有需要时,再补充下资料.

注意事项

RABBITMQ_CONFIG_FILE 这个参数的配置,注意路径中,是不需要 .config 后缀的(The path to the configuration file, without the .config extension. )。

官方文档 - RABBITMQ_CONFIG_FILE