Just murmur

建立預先設定好 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":{}
        }]
}