建立預先設定好 Exchange/Queue/User 的 RabbitMQ Docker Image
如果都已經用 Docker 了,結果 image 給別人以後還要按手冊建立 queue 和 exchange,這樣可能有點掉漆,幸好網路上資料很多。
首先,必須先進去 RabbitMQ Management 的網頁,把原本的設定匯出,然後再更名為definitions.json
。
Dockerfile
只要把 rabbitmq.config 和 definitions.json 加進去就行啦!
FROM rabbitmq:3-management
ADD rabbitmq.config /etc/rabbitmq/
ADD definitions.json /etc/rabbitmq/
rabbitmq.config
應該不太需要說,definitions.json
才是用來預先建立 queue/exchange/user 的。另外,這邊當初卡了好久,原因是匯出的 definitions.json
匯入後都會說帳號密碼錯誤,後來發現在 RabbitMQ 3.6 以後,密碼預設適用 SHA-256,而在之前是 MD5,所以在舊版匯出的密碼 hash 以 SHA-256 的方式匯入就會出問題了。解決的方法就是告訴 RabbitMQ 說密碼是用 MD5,可參考下面 definitions.json
的 "hashing_algorithm":"rabbit_password_hashing_md5"
:
{
"rabbit_version":"3.5.6",
"users": [
{
"name":"guest",
"password_hash":"mkob/5khgoVguaOUJD0ZnakCOVY=",
"hashing_algorithm":"rabbit_password_hashing_md5",
"tags":"administrator"
}],
"vhosts": [
{
"name":"/"
}],
"permissions": [
{
"user":"guest",
"vhost":"/",
"configure":".*",
"write":".*",
"read":".*"
}],
"queues": [
{
"name":"QU:Blah",
"vhost":"/",
"durable":true,
"auto_delete":false,
"arguments":{}
}],
"exchanges": [
{
"name":"EX:Blah",
"vhost":"/",
"type":"direct",
"durable":true,
"auto_delete":false,
"internal":false,
"arguments":{}
}],
"bindings": [
{
"source":"EX:Blah",
"vhost":"/",
"destination":"QU:Blah",
"destination_type":"queue",
"routing_key":"",
"arguments":{}
}]
}