RabbitMQ 安装配置和 Spring 集成
本文参考资料:
- https://www.rabbitmq.com/configure.html
- https://www.rabbitmq.com/access-control.html
- https://github.com/rabbitmq/rabbitmq-auth-backend-http
- https://github.com/rabbitmq/rabbitmq-auth-backend-cache
环境: RabbitMQ 版本为 3.7.9,操作系统为 Ubuntu 18.04 LTS
启用 HTTP 后台认证需要使用 rabbitmq_auth_backend_http 插件,同时该插件还推荐配合 rabbitmq_auth_backend_cache 通过缓存减轻授权认证服务器压力。
启用插件
输入以下命令查看所有插件:
通过下面命令分别启用这两个插件:
通过 sudo rabbitmqctl environment
查看系统默认设置,和这两个插件相关的部分配置如下:
下面通过添加配置文件来修改默认配置。
添加配置
不同操作系统中配置文件默认的位置分别如下:
- Generic UNIX-
$RABBITMQ_HOME/etc/rabbitmq/
- Debian-
/etc/rabbitmq/
- RPM-
/etc/rabbitmq/
- Mac OSX (Homebrew)-
${install_prefix}/etc/rabbitmq/, the Homebrew prefix is usually /usr/local
- Windows-
%APPDATA%\RabbitMQ\
本文 Ubuntu 配置文件在 /etc/rabbitmq/
目录。
默认情况下 RabbitMQ 使用的默认配置,在该目录下面并没有配置文件,需要自己手动创建。
RabbitMQ 从 3.7.0 版本开始推荐使用 sysctl 格式的配置,但是仍然支持老版本 Erlang 语法。
不同格式的配置文件名如下:
- rabbitmq.conf - sysctl 格式的配置文件
- advanced.config - Erlang 语法进行高级配置的文件,这个配置会和 rabbitmq.conf 合并使用
- rabbitmq.config - 老版本 Erlang 语法
在参考资料的给出的 4 个地址的文档中都给出了两种语法的配置方法,本文采用 sysctl 格式进行配置。
在配置目录新增 rabbitmq.conf 配置文件,添加如下配置:
认证可选项说明:
- internalfor rabbit_auth_backend_internal
- ldapfor rabbit_auth_backend_ldap (from theLDAP plugin)
- httpfor rabbit_auth_backend_http (from theHTTP auth backend plugin)
- amqpfor rabbit_auth_backend_amqp (from theAMQP 0-9-1 auth backend plugin)
- dummyfor rabbit_auth_backend_dummy
配置好后,重启 RabbitMQ 服务:
重启后,通过 sudo rabbitmqctl environment
查看配置是否成功。
启动授权认证服务
使用官方提供的示例进行测试:
可以直接从 GitHub 下载,或者从下面网盘下载单独的 Spring Boot 示例部分:
链接: https://pan.baidu.com/s/1RjF-hXdYml0KHgt-wRSweQ
提取码: hsbt
该示例代码中提供了下面几个用户:
上面在配置后台认证的时候,同时指定了 cache(http) 和 internal 方式,所以我们原有的账号即使在没有 http 认证服务器的情况下仍然可以登录。
guest 本身是系统默认账号,只能从 localhost 登陆。所以如果你不是 localhost 访问,可以尝试 springy 登陆。
通过 springy/springy 可以成功登陆,你并没有创建过该账号,但是可以登录系统。
如果你通过 HTTP 方式登陆后台,由于界面会自动刷新,你可以发现几乎间隔 60 秒就会重新进行认证,这个间隔由 auth_cache.cache_ttl
缓存过期时间控制。
当对队列交换机等功能进行操作时,会调用其它的 API 验证权限。
注意
当使用 HTTP 认证成功时,会通过 HTTP 方式进行授权。如果认证失败,就会继续调用 internal 方式进行认证,internal 方式认证成功时,后续的授权也是通过 internal 方式进行。
通过那种方式认证成功,就会继续使用该方式进行授权。