【问题标题】:Define RabbitMQ policies in configuration file在配置文件中定义 RabbitMQ 策略
【发布时间】:2015-07-27 20:32:45
【问题描述】:

我想默认为我的所有队列定义镜像。一旦节点启动,我目前必须use rabbitmqctl

rabbitmqctl set_policy ha-all "" '{"ha-mode":"all"}'

如果我的一个节点发生故障,我必须记住在重启时重新执行该代码。

有没有办法自动配置我的节点以使用镜像队列?

【问题讨论】:

    标签: rabbitmq rabbitmqctl


    【解决方案1】:

    策略可以在定义文件中指定,可以从您的配置文件中引用。

    我如何设置特定策略的示例(不确定是否可以在策略中指定 ha):

    /etc/rabbitmq/rabbitmq.config

    [
    {rabbit,
        [{vm_memory_high_watermark, 0.8}]
    },
    {rabbitmq_management,
        [{listener, [{port, 15672}]},
         {load_definitions, "/etc/rabbitmq/rabbitmq_definitions.json"},
         {http_log_dir, "/var/log/rabbitmq/management_http.log"}]
    }
    ].
    

    /etc/rabbitmq/rabbitmq_definitions.json

    {       "users":[
                {"name":"rabbot","password_hash":"Cvse5iGOg20UqUq7Za9D1tatOJnMVDru4GHtxqc02g7zj5ur","tags":""},
                {"name":"rabnet","password_hash":"CqqG2fwvH6xz64NpibGJx2M7ZCyFnR1BQBM+C0KH2qRPmVxF","tags":"administrator"}],
        "vhosts":[
                {"name":"/"}],
        "permissions":[
                {"user":"viabot","vhost":"VIA","configure":".*","write":".*","read":".*"},
                {"user":"vianet","vhost":"VIA","configure":".*","write":".*","read":".*"}],
        "parameters":[],
        "policies":[
                {"vhost":"VIA","name":"DLX","pattern":".*","apply-to":"queues","definition":{"dead-letter-exchange":"dead_letter"},"priority":0}
                ],
        "queues":[
                {"name":"store_to_es","vhost":"VIA","durable":true,"auto_delete":false,"arguments":{}},
                {"name":"store_to_mongodb","vhost":"VIA","durable":true,"auto_delete":false,"arguments":{}}
                ],
        "exchanges":[
                {"name":"data_incoming","vhost":"VIA","type":"fanout","durable":true,"auto_delete":false,"internal":false,"arguments":{}},
                {"name":"sms_incoming","vhost":"VIA","type":"fanout","durable":true,"auto_delete":false,"internal":false,"arguments":{}}
                ],
        "bindings":[
                {"source":"data_incoming","vhost":"VIA","destination":"store_to_es","destination_type":"queue","routing_key":"","arguments":{}},
                {"source":"sms_incoming","vhost":"VIA","destination":"store_to_mongodb","destination_type":"queue","routing_key":"","arguments":{}}
        ]
    }
    

    我正在共享此配置文件和定义文件,因为无法从 RabbitMQ 网站找出它。

    注意:此配置适用于在 Ubuntu 14.04 上运行的 RabbitMQ 3.6.1

    【讨论】:

      【解决方案2】:

      要向IvanD's answer 添加更多详细信息,我就是这样做的。

      首先:sudo nano /etc/rabbitmq/rabbitmq.config(此命令可能因您的操作系统而异)

      [
        {rabbit,
          [
              {default_vhost,<<"/">>},
              {default_user,<<"someuser">>},
              {default_pass,<<"somepassword">>},
              {default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
              {default_user_tags, [administrator]}
          ]
        },
        {rabbitmq_management,
          [{listener, [{port, 15672}]},
              {load_definitions, "/etc/rabbitmq/rabbitmq_definitions.json"},
              {http_log_dir, "/var/log/rabbitmq/management_http.log"}]
        }
      ].
      

      然后创建附加的 json:sudo nano /etc/rabbitmq/rabbitmq_definitions.json(此命令可能因您的操作系统而异)。 其内容:

      {
        "vhosts":[
              {"name":"/"}
        ],
        "policies":[
              {"vhost":"/","name":"ha","pattern":"", "definition":{"ha-mode":"all","ha-sync-mode":"automatic","ha-sync-batch-size":5}}
        ]
      }
      

      重要提示:ha-sync-batch-size 仅在 3.6.0 以上的 RabbitMQ 版本中受支持! https://www.rabbitmq.com/ha.html#sync-batch-size 如果您的 Rabbit 比这更老,请从 rabbitmq_definitions.json 中删除该设置。

      我正在使用 Ubuntu 14.04 Trusty 和 RabbitMQ v.3.6.2。

      【讨论】:

        【解决方案3】:

        是的,您可以使用definition import at load time在重启时直接加载策略、队列、交换、绑定、用户等等。

        1. 预配置你的兔子

          转到http://localhost:15672 Admin -> Policies 页面并创建您需要的新策略:

          您还可以预先配置队列和其他东西。

        2. 转储定义

          curl -s -H "Accept:application/json" -u guest:guest http://localhost:15672/api/definitions &gt; definitions.json

          您还可以使用网络界面转储您的定义。打开概览选项卡,向下滚动:

          (!!!)更改definitions.json,以便仅在重启时保留您需要的东西。

          将有您的政策部分,保留它:

          ...
          "policies": [
            {
              "vhost": "/",
              "name": "ha-all",
              "pattern": "",
              "apply-to": "all",
              "definition": {
                "ha-mode": "all"
              },
              "priority": 0
            }
          ]
          ...
          
        3. 重启时加载定义

          definitions.json 放在你的兔子旁边,并将这一行添加到rabbit.conf。无需使用旧格式:

          management.load_definitions = /path/to/definitions.json
          

        为了在重启后加载一些东西使用cli tools


        向@IvanD 致敬,因为我的答案与his own 几乎相同,但揭示了详细的步骤和新的配置格式用法。评论空间不足。

        【讨论】:

          【解决方案4】:

          无法在rabbitmq.config 文件中设置策略。一种解决方法是使用 init 脚本启动 rmq 并将 rabbitmqctl 命令放入其中,以便在 rmq 启动或重新启动时运行它。

          【讨论】:

            【解决方案5】:

            最后我找到了一些有用的东西: 不需要 configMap 或 rabbitmq.config 文件。 下

            containers:
            ...
            ...
            ...
            
                lifecycle:
                          postStart:
                            exec:
                              command: ["/bin/sh","-c","rabbitmq-plugins --offline enable rabbitmq_management;until rabbitmqctl node_health_check; do  sleep 5;done;rabbitmqctl set_policy ha-all \".\" '{\"ha-mode\":\"all\", \"ha-sync-mode\":\"automatic\"}' --apply-to all --priority 0;"]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-03-19
              • 2022-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-07-04
              • 2017-03-16
              相关资源
              最近更新 更多