热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三、RabbitMQ安装

安装前准备Linux版本信息:发行版本:CentOSLinuxrelease7.5.1804(Core)内核版本:Linuxversion

安装前准备

Linux版本信息:

  • 发行版本:CentOS Linux release 7.5.1804 (Core)
  • 内核版本:Linux version 3.10.0-862.el7.x86_64

所需软件:

  • Erlang版本:erlang-19.3.6.12-2.el7.centos.x86_64.rpm 下载地址
  • RabbitMQ版本:rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm 下载地址

安装Erlang

因为RabbitMQ是由Erlang语言编写的,因此在使用RabbitMQ之前需要安装受支持的Erlang版本,在CentOS上,Erlang包有三种常用的源

  • RabbitMQ提供的被剥离的包,只提供运行RabbitMQ所需的组件,官方称零依赖项,容易安装,如果Erlang只是用来提供运行RabbitMQ的,推荐使用。
  • Erlang官方提供的包,安装时需要安装依赖多,如果还需要Erlang做相关开发或运行环境,使用该包
  • EPEL源提供的包,但该包版本过低,不使用该方法下载安装

因为只是使用Erlang运行RabbitMQ,所有下面的学习使用RabbitMQ提供的包。二进制rpm包可以从Bintray和GitHub获得,选择你需要相应的版本下载。

下载完成,安装

[hayson@localhost ~]$ rpm -ivh erlang-19.3.6.12-2.el7.centos.x86_64.rpm
警告:erlang-19.3.6.12-2.el7.centos.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
准备中... ################################# [100%]
正在升级/安装...1:erlang-19.3.6.12-2.el7.centos ################################# [100%]

如果提示需要相关依赖,是因为该软件包故意不包括OpenSSL/libcrypto。需要单独提供,最近的Erlang版本需要较新的OpenSSL版本,例如1.0.1。一般安装了SSH后,都安装了。我安装的CentOS已安装有,所以没提示。

测试是否安装完成,输入下面命令

[hayson@localhost ~]$ erl
Erlang/OTP 19 [erts-8.3.5.6] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.3.5.6 (abort with ^G)
1>

进入了Eshell,说明安装完成并正确启动,输出了Erlang的版本号、Eshell版本号等信息。

退出Eshell输入halt().

使用了RabbitMQ提供Erlang的rpm包,方便快捷地安装Erlang,省略了Erlang官方提供的源码编译和环境变量设置。

安装RabbitMQ

官方文档提供多种安装方法,本人下载rpm软件包并手动安装。RabbitMQ软件包可以从Github选择版本下载。

安装RabbitMQ

[hayson@localhost ~]$ sudo rpm -ivh rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm
[sudo] hayson 的密码:
警告:rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
错误:依赖检测失败:socat 被 rabbitmq-server-3.6.16~rc.1-1.el7.noarch 需要

安装时提示缺少socat依赖,如果CentOS不能联网,可以通过该站点下载socat包进行安装。我这里直接yum下载

查看仓库中是否有socat

[hayson@localhost ~]$ yum list | grep socat
socat.x86_64 1.7.3.2-2.el7 base

安装socat

[hayson@localhost ~]$ yum install socat

重新安装RabbitMQ

[hayson@localhost ~]$ sudo rpm -ivh rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...1:rabbitmq-server-3.6.16~rc.1-1.el7################################# [100%]

RabbitMQ安装成功

启动RabbitMQ

[hayson@localhost ~]$ sudo rabbitmq-serverRabbitMQ 3.6.16-rc.1. Copyright (C) 2007-2018 Pivotal Software, Inc.## ## Licensed under the MPL. See http://www.rabbitmq.com/## ############ Logs: /var/log/rabbitmq/rabbit@localhost.log###### ## /var/log/rabbitmq/rabbit@localhost-sasl.log##########Starting broker...completed with 0 plugins.

可以看到RAbbitMQ启动成功,并输出RabbitMQ版本、日志路径和开启插件数(安装默认不开启),Ctrl+C停止运行。

systemd使用

使用rpm包安装RabbitMQ的好处是,安装后默认配好了快捷启动、停止、运行状态、失败重启等设置的systemd

  • RabbitMQ运行

    启动RabbitMQ

    [hayson@localhost ~]$ sudo systemctl start rabbitmq-server

    停止RabbitMQ

    [hayson@localhost ~]$ sudo systemctl stop rabbitmq-server

    查看RabbitMQ状态

    [hayson@localhost ~]$ sudo systemctl status rabbitmq-server

  • 设置开机系统引导时,运行RabbitMQ

    开启

    [hayson@localhost ~]$ sudo systemctl enable rabbitmq-server
    Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.

    关闭

    [hayson@localhost ~]$ sudo systemctl disable rabbitmq-server
    Removed symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service.

    查看状态

    [hayson@localhost ~]$ sudo systemctl is-enabled rabbitmq-server
    disabled

RabbitMQ参数设置

RabbitMQ带有默认的内置设置。在某些环境(例如开发和QA)中,这些可能完全足够。对于所有其他情况以及生产部署调优,我们需要配置一些参数区分于默认的配置。

比如rabbitmq的默认端口是5672,如何去修改端口5672为5673呢?

RabbitMQ提供了三种自定义服务器的通用方法:

  1. 配置文件(推荐使用的方式)
  2. 环境变量
  3. 运行时参数和策略

配置文件

以修改RabbitMQ默认端口5672为例。修改端口56725673

  • 默认配置文件(强烈不推荐修改默认配置文件)

    RabbitMQ的默认配置文件是RabbitMQ的内置默认值,不建议修改,位于/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin下,打开文件

    [hayson@localhost ~]$ sudo vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin/rabbit.app

    可以看到如下内容(这里截取部分)

    {env, [{tcp_listeners, [5672]},{default_user, <<"guest">>},{default_pass, <<"guest">>},{default_user_tags, [administrator]},{default_vhost, <<"/">>},{default_permissions, [<<".*">>, <<".*">>, <<".*">>]},{loopback_users, [<<"guest">>]},

    上面部分显示的配置为&#xff1a;当前RabbitMQ的端口号5672&#xff0c;默认用户和密码都为guest&#xff0c;身份为管理员&#xff0c;默认虚拟主机为/&#xff0c;权限为拥有所有权限&#xff0c;登录权限只能localhost127.0.0.1。如果要修改端口56725673&#xff0c;则只需把5672改为5673。其他修改用户名或密码把原来修改即可。

  • 自定义配置文件

    通过查看服务状态

    [hayson&#64;localhost ~]$ sudo systemctl status rabbitmq-server

    1070782-20181119103203599-278974149.png

    可以看到Logs文件位置&#xff0c;打开该文件位置日志文件

    [hayson&#64;localhost ~]$ cat /var/log/rabbitmq/rabbit&#64;localhost.log

    1070782-20181119103213527-1431982354.png

    这里显示的是没有找到配置文件&#xff0c;我们可以自己创建这个文件

    [hayson&#64;localhost ~]$ sudo vim /etc/rabbitmq/rabbitmq.config

    写入如下内容

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

    保存配置后重启服务

    [hayson&#64;localhost ~]$ sudo systemctl stop rabbitmq-server
    [hayson&#64;localhost ~]$ sudo systemctl start rabbitmq-server

官网提供了一份rabbitmq.config示列&#xff0c;此示例文件包含设置的大多数配置项&#xff08;省略一些非常模糊的配置&#xff09;以及这些设置的文档的示例。 所有配置项都在示例中注释掉&#xff0c;因此您可以取消注释所需的内容。请注意&#xff0c;不要将其当作一般的推荐配置。

开启web界面管理插件

安装RabbitMQ后&#xff0c;默认不开启任何插件的&#xff0c;需要我们手动去开启&#xff0c;管理插件的命令为rabbitmq-plugins&#xff0c;可以先查看该命令用法

rabbitmq-plugins用法

[hayson&#64;localhost ~]$ sudo rabbitmq-plugins
Usage:
rabbitmq-plugins [-n ] []
Commands:list [-v] [-m] [-E] [-e] []enable [--offline] [--online] ...disable [--offline] [--online] ...set [--offline] [--online] ...

  • 查看RabbitMQ所有可开启插件

    [hayson&#64;localhost ~]$ sudo rabbitmq-plugins listConfigured: E &#61; explicitly enabled; e &#61; implicitly enabled| Status: * &#61; running on rabbit&#64;localhost|/
    [ ] amqp_client 3.6.16-rc.1
    [ ] cowboy 1.0.4
    [ ] cowlib 1.0.2
    [ ] rabbitmq_amqp1_0 3.6.16-rc.1
    [ ] rabbitmq_auth_backend_ldap 3.6.16-rc.1
    [ ] rabbitmq_auth_mechanism_ssl 3.6.16-rc.1
    [ ] rabbitmq_consistent_hash_exchange 3.6.16-rc.1
    [ ] rabbitmq_event_exchange 3.6.16-rc.1
    [ ] rabbitmq_federation 3.6.16-rc.1
    [ ] rabbitmq_federation_management 3.6.16-rc.1
    [ ] rabbitmq_jms_topic_exchange 3.6.16-rc.1
    [ ] rabbitmq_management 3.6.16-rc.1
    [ ] rabbitmq_management_agent 3.6.16-rc.1
    [ ] rabbitmq_management_visualiser 3.6.16-rc.1
    [ ] rabbitmq_mqtt 3.6.16-rc.1
    [ ] rabbitmq_random_exchange 3.6.16-rc.1
    [ ] rabbitmq_recent_history_exchange 3.6.16-rc.1
    [ ] rabbitmq_sharding 3.6.16-rc.1
    [ ] rabbitmq_shovel 3.6.16-rc.1
    [ ] rabbitmq_shovel_management 3.6.16-rc.1
    [ ] rabbitmq_stomp 3.6.16-rc.1
    [ ] rabbitmq_top 3.6.16-rc.1
    [ ] rabbitmq_tracing 3.6.16-rc.1
    [ ] rabbitmq_trust_store 3.6.16-rc.1
    [ ] rabbitmq_web_dispatch 3.6.16-rc.1
    [ ] rabbitmq_web_mqtt 3.6.16-rc.1
    [ ] rabbitmq_web_mqtt_examples 3.6.16-rc.1
    [ ] rabbitmq_web_stomp 3.6.16-rc.1
    [ ] rabbitmq_web_stomp_examples 3.6.16-rc.1
    [ ] sockjs 0.3.4

    上面命令列出了RabbitMQ所有的插件&#xff0c;前面的中括号[ ]表示空为没有开启&#xff0c;其中rabbitmq_management是web界面管理插件

  • 开启rabbitmq_management插件

    [hayson&#64;localhost ~]$ sudo rabbitmq-plugins enable rabbitmq_management
    The following plugins have been enabled:amqp_clientcowlibcowboyrabbitmq_web_dispatchrabbitmq_management_agentrabbitmq_managementApplying plugin configuration to rabbit&#64;localhost... started 6 plugins.

    可以看到共开启了6个插件。再次查看插件列表&#xff0c;前面中括号[ ]出现e*标记表示开启

    [hayson&#64;localhost ~]$ sudo rabbitmq-plugins listConfigured: E &#61; explicitly enabled; e &#61; implicitly enabled| Status: * &#61; running on rabbit&#64;localhost|/
    [e*] amqp_client 3.6.16-rc.1
    [e*] cowboy 1.0.4
    [e*] cowlib 1.0.2
    [ ] rabbitmq_amqp1_0 3.6.16-rc.1
    [ ] rabbitmq_auth_backend_ldap 3.6.16-rc.1
    [ ] rabbitmq_auth_mechanism_ssl 3.6.16-rc.1
    [ ] rabbitmq_consistent_hash_exchange 3.6.16-rc.1
    [ ] rabbitmq_event_exchange 3.6.16-rc.1
    [ ] rabbitmq_federation 3.6.16-rc.1
    [ ] rabbitmq_federation_management 3.6.16-rc.1
    [ ] rabbitmq_jms_topic_exchange 3.6.16-rc.1
    [E*] rabbitmq_management 3.6.16-rc.1
    [e*] rabbitmq_management_agent 3.6.16-rc.1
    [ ] rabbitmq_management_visualiser 3.6.16-rc.1
    [ ] rabbitmq_mqtt 3.6.16-rc.1
    [ ] rabbitmq_random_exchange 3.6.16-rc.1
    [ ] rabbitmq_recent_history_exchange 3.6.16-rc.1
    [ ] rabbitmq_sharding 3.6.16-rc.1
    [ ] rabbitmq_shovel 3.6.16-rc.1
    [ ] rabbitmq_shovel_management 3.6.16-rc.1
    [ ] rabbitmq_stomp 3.6.16-rc.1
    [ ] rabbitmq_top 3.6.16-rc.1
    [ ] rabbitmq_tracing 3.6.16-rc.1
    [ ] rabbitmq_trust_store 3.6.16-rc.1
    [e*] rabbitmq_web_dispatch 3.6.16-rc.1
    [ ] rabbitmq_web_mqtt 3.6.16-rc.1
    [ ] rabbitmq_web_mqtt_examples 3.6.16-rc.1
    [ ] rabbitmq_web_stomp 3.6.16-rc.1
    [ ] rabbitmq_web_stomp_examples 3.6.16-rc.1
    [ ] sockjs 0.3.4

    开启插件后&#xff0c;通过以下命令可以查看到RabbitMQ所有监听的端口

    [hayson&#64;localhost ~]$ sudo rabbitmqctl status | grep listeners{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},

    以上可以看到第三个的端口15672&#xff0c;这是rabbitmq_management插件监听的端口

    也可以通过端口查看

    [hayson&#64;localhost ~]$ sudo lsof -i:5672
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    beam 39771 rabbitmq 51u IPv6 143492 0t0 TCP *:amqp (LISTEN)
    [hayson&#64;localhost ~]$ sudo lsof -i:15672
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    beam 39771 rabbitmq 52u IPv4 143497 0t0 TCP *:15672 (LISTEN)

  • 配置防火墙端口

    开启rabbitmq-management后&#xff0c;要让外部浏览器进行访问&#xff0c;需要防火墙端口放行

    [hayson&#64;localhost ~]$ sudo firewall-cmd --zone&#61;public --add-port&#61;15672/tcp --permanent
    [hayson&#64;localhost ~]$ sudo firewall-cmd --zone&#61;public --add-port&#61;5672/tcp --permanent
    [hayson&#64;localhost ~]$ sudo firewall-cmd --zone&#61;public --add-port&#61;5672/tcp --permanent
    [hayson&#64;localhost ~]$ sudo firewall-cmd --reload

    上面顺便把RabbitMQ目前所有监听的端口都放行了&#xff0c;浏览器访问WEB管理页面可以只放行15672

    在浏览器中输入服务器IP:15672 就可以看到RabbitMQ的WEB管理台。

  • 登录WEB管理台

    默认用户guest登录&#xff08;不推荐&#xff09;

    guest默认vhost为"/"&#xff0c;具有"/"上的全部权限&#xff0c;仅能有localhost访问RabbitMQ包括Plugin&#xff0c;建议删除或更改密码。可通过将配置文件中loopback_users置空来取消其本地访问的限制。可以通过修改默认配置文件rabbit.app或自定义配置文件rabbitmq.config进行配置外网访问

    • 修改默认配置文件&#xff08;强烈不推荐使用&#xff09;

      RabbitMQ的默认配置文件位于/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin

      [hayson&#64;localhost ~]$ sudo vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin/rabbit.app

      在命令行模式下输入/loopback找到该行

      {loopback_users, [<<"guest">>]},

      把中括号[]设为空

      {loopback_users, []},

      保存退出&#xff0c;重启生效后&#xff0c;可以使用guest账号密码登录

    • 自定义配置文件

      [hayson&#64;localhost ~]$ sudo vim /etc/rabbitmq/rabbitmq.config

      写入如下内容

      [{rabbit, [{loopback_users,[]}]}
      ].

      保存后&#xff0c;重启RabbitMQ&#xff0c;可以在浏览器通过默认用户guest登录。

    创建用户登录(推荐)

    默认情况下&#xff0c;访问RabbitMQ服务的用户名和密码都是guest,这个账户有限制&#xff0c;默认只能通过本地网络&#xff08;如localhost&#xff09;访问&#xff0c;远程网络访问受限&#xff0c;通过配置可以设置外网访问&#xff0c;但不推荐。所以需要另外创建一个用户

    1. 创建用户

      [hayson&#64;localhost rabbitmq]$ rabbitmqctl add_user admin admin
      Creating user "admin"

    2. 为用户设置权限

      设置用户admin访问名为“/(所有)”的虚拟主机&#xff0c;并对所有.*(正则)的资源具有配置权限&#xff0c;并对所有资源执行写入.*(正则)和读取.*(正则)权限资源&#xff1a;

      [hayson&#64;localhost rabbitmq]$ rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
      Setting permissions for user "admin" in vhost "/"

    3. 设置用户为管理员角色

      [hayson&#64;localhost rabbitmq]$ rabbitmqctl set_user_tags admin administrator
      Setting tags for user "admin" to [administrator]

    4. 查看RabbitMQ用户

      [hayson&#64;localhost rabbitmq]$ rabbitmqctl list_users
      Listing users
      admin [administrator]
      guest [administrator]

      可以看到用户admin为管理员权限&#xff0c;重启RabbitMQ&#xff0c;可以在浏览器通过默认用户admin登录。

RabbitMQ用户角色及权限控制

RabbitMQ用户角色分类&#xff1a;

  • none

    不能访问management plugin

  • management

    用户可以通过AMQP做的任何事外加&#xff1a;

    1. 列出自己可以通过AMQP登入的virtual hosts
    2. 查看自己的virtual hosts中的queues, exchanges 和 bindings
    3. 查看和关闭自己的channels 和 connections
    4. 查看有关自己的virtual hosts的“全局”的统计信息&#xff0c;包含其他用户在这些virtual hosts中的活动。
  • policymaker

    management可以做的任何事外加&#xff1a;

    1. 查看、创建和删除自己的virtual hosts所属的policies和parameters
  • monitoring

    management可以做的任何事外加&#xff1a;

    1. 列出所有virtual hosts&#xff0c;包括他们不能登录的virtual hosts
    2. 查看其他用户的connections和channels
    3. 查看节点级别的数据如clustering和memory使用情况
    4. 查看真正的关于所有virtual hosts的全局的统计信息
  • administrator

    policymaker和monitoring可以做的任何事外加:

    1. 创建和删除virtual hosts
    2. 查看、创建和删除users
    3. 查看创建和删除permissions
    4. 关闭其他用户的connections

创建用户并设置角色&#xff1a;

  • 可以创建管理员用户&#xff0c;负责整个MQ的运维&#xff0c;例如&#xff1a;

    [hayson&#64;localhost ~]$ sudo rabbitmqctl add_user user_admin passwd_admin

    赋予其administrator角色&#xff1a;

    [hayson&#64;localhost ~]$ sudo rabbitmqctl set_user_tags user_admin administrator

  • 可以创建RabbitMQ监控用户&#xff0c;负责整个MQ的监控&#xff0c;例如&#xff1a;

    [hayson&#64;localhost ~]$ sudo rabbitmqctl add_user user_monitoring passwd_monitor

    赋予其monitoring角色&#xff1a;

    [hayson&#64;localhost ~]$ sudo rabbitmqctl set_user_tags user_monitoring monitoring

  • 可以创建某个项目的专用用户&#xff0c;只能访问项目自己的virtual hosts

    [hayson&#64;localhost ~]$ sudo rabbitmqctl add_user user_proj passwd_proj

    赋予其monitoring角色&#xff1a;

    [hayson&#64;localhost ~]$ sudo rabbitmqctl set_user_tags user_proj management

创建和赋角色完成后查看并确认&#xff1a;

[hayson&#64;localhost ~]$ sudo rabbitmqctl list_users

RabbitMQ权限控制

默认virtual host&#xff1a;"/"

默认用户&#xff1a;guest

guest具有"/"上的全部权限&#xff0c;仅能有localhost访问RabbitMQ包括Plugin&#xff0c;建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制&#xff1a;

[{rabbit, [{loopback_users, []}]}]

用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等&#xff0c;操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为&#xff0c;写权限可向资源发送消息&#xff0c;读权限从资源获取消息。比如&#xff1a;

  • exchange和queue的declare与delete分别需要exchange和queue上的配置权限

  • exchange的bind与unbind需要exchange的读写权限

  • queue的bind与unbind需要queue写权限、exchange的读权限

  • 发消息(publish)需exchange的写权限

  • 获取或清除(get、consume、purge)消息需queue的读权限

对何种资源具有配置、写、读的权限通过正则表达式来匹配&#xff0c;具体命令如下&#xff1a;

set_permissions [-p ]

其中&#xff0c; 的位置分别用正则表达式来匹配特定的资源。

需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。

为用户赋权&#xff1a;

$sudo rabbitmqctl set_permissions -p /vhost1 user_admin &#39;.*&#39; &#39;.*&#39; &#39;.*&#39;

该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源

查看权限&#xff1a;

$sudo rabbitmqctl list_user_permissions user_admin

转载于:https://www.cnblogs.com/zenghi-home/p/9961997.html


推荐阅读
author-avatar
涩味122_508
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有