我需要使用RabbitMQ服务和我的应用程序设置一个docker-compose
。此RabbitMQ服务需要具备三项才能正常工作:
为此,我们尝试在我们的项目中创建一个名为rabbitmq
的文件夹,其中包含以下文件:
definitions.json
{
"rabbit_version": "3.6.6",
"users": [
{
"name": "user1",
"password_hash": "pass1",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
}
],
"vhosts": [
{
"name": "\/vhost1"
}
],
"permissions": [
{
"user": "user1",
"vhost": "\/vhost1",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"policies": [],
"queues": [],
"exchanges": [],
"bindings": []
}
rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
我们正在使用volumes
中的docker-compose
命令并使用以下文件来安装此文件夹:
version: '3'
services:
rabbit:
image: rabbitmq:management
ports:
- "8080:15672"
- "5672:5672"
volumes:
- ${PWD}/rabbitmq:/etc/rabbitmq
我们目前面临两个问题:
localhost:8080
文件中指定了该端口的映射,我们也无法通过docker-compose
访问RabbitMQ管理UI。defininitions.json
文件中定义虚拟主机的交换? (我在哪里可以读到它?)答案 0 :(得分:0)
第一个问题很容易解决。未创建交换的原因是因为"exchanges"
文件中的definitions.json
字段为空。要解决此问题,您需要向该列表添加交换对象:
"exchanges": [
{
"name": "Pizza",
"vhost": "\/vhost1",
"type": "fanout",
"durable": true,
"auto_delete": false,
"internal": false,
"arguments": {}
}
],
可以在此博客文章中了解更多有关此的信息:
https://devops.datenkollektiv.de/creating-a-custom-rabbitmq-container-with-preconfigured-queues.html
此处配置存在几个问题。首先,我用本地文件夹中的内容粉碎了容器中原始/etc/rabbitmq
文件夹的内容。这不是故意的,可以在这里找到解决此问题的方法:
Unknown variable "management.load_definitions" in rabbitmq rabbit.conf file
第二个问题在rabbitmq.conf
文件中。我们缺少告知应用程序加载定义文件的字段。以下是rabbitmq.conf
文件的正确版本:
loopback_users.guest = false
listeners.tcp.default = 5672
management.load_definitions = /etc/rabbitmq/definitions.json
第三个(也是最后一个)问题是用户密码,特别是password_hash
字段,该字段需要遵循特定的算法并以特定格式进行编码。有关此内容的更多信息,请参阅RabbitMQ的官方文档:
https://www.rabbitmq.com/passwords.html
要跳过处理盐分,哈希和编码的烦恼,如果您只想像我们想要的那样测试用于集成目的的设置,则只需使用示例中提供的密码test12
:
"users": [
{
"name": "user1",
"password_hash": "kI3GCqW5JLMJa4iX1lo7X4D6XbYqlLgxIs30+P6tENUV2POR",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
}
]
但是,对于您而言,重要的是要知道如何生成RabbitMQ将接受的用户密码,这是一个bash脚本,由同事的流血和泪水创建:
#!/bin/bash
PWD_HEX=$(echo -n $1 | xxd -p)
SALT="908D C60A"
HEX="$SALT $PWD_HEX"
SHA256=$(echo -n $HEX | xxd -r -p | sha256sum)
# This is thw pwd to be inserted on your rabbit load_definitions file
echo "908D C60A $SHA256" | xxd -r -p | base64
用法:./my_script userpass1
通过所有这些方式,人们应该能够通过docker映像创建用户,虚拟主机和交换,同时还可以访问管理UI。