zoukankan      html  css  js  c++  java
  • RabbitMQ Policy的使用

    RabbitMQ作为最流行的MQ中间件之一,广泛使用在各类系统中,今天我们就来讨论一下如何通过Policies给RabbitMQ中已经创建的Queue添加属性和参数。

    Policise 的作用

    通常来说,我们会在创建一个Queue时指定了队列的各项属性和参数,例如message-ttlx-dead-letter-exchangex-dead-letter-route-keyx-max-length等,一旦RabbitMQ创建Queue成功,则不允许再修改Queue的任何属性或参数,除非删除重建。

    我们在实际使用中,随着业务的变化,经常会出现需要调整message-ttlx-max-length等参数来改变Queue行为的场景,那这个时候怎么办呢,总不能暂停上下游的生产者和消费者来等Queue的删除重建吧?这个时候就需要使用到RabbitMQ的Policy机制了。

    本文的重点是如何使用Policy,更多关于Policy的意义可参考 Why Policies Exist

    Policies 的使用

    创建Policy

    Policies是RabbitMQ的Server端机制,不能通过Client来创建,RabbitMQ支持以下几种方式来创建Policy:

    1. rabbitmqctl
    2. Http API
    3. Management Plugin Web UI

    这里选择最直观的 Web UI方式来讲,Web UI创建Policy的界面在 Admin Tab页中的Policies右侧导航栏,如图:

    点击进入后,可以看到4块内容,User PoliciesAdd / update a policyOperator PoliciesAdd / update an operator policy

    打开Add / update an operator policy

    从界面上可以非常直观的看到一个Policy需要的元素:

    • Virtual host
    • Name:
      这个Policy的名称
    • Pattern:
      Policy根据正则表达式去匹配Queues/Exchanges名称
    • Apply to:
      这个Policy对Queue还是对Exchange生效,或者两者都适用
    • Priority:
      优先级。
    • Definition:
      添加的args,KV键值对。

    Definition 可添加的args参考以下文档:

    Operator Policy

    简单说明一下 Operator Policy 和 User Policy 的区别:

    • Operator Policy 是给服务提供商或公司基础设施部门用来设置某些需要强制执行的通用规则
    • User Policy 是给业务应用用来设置的规则

    Operator Policy 和 User Policy 会合并后作用于队列,并且为防止 Operator Policy 对队列某些关键属性例如死信队列交换器Dead Letter Exchange的覆盖导致业务应用产生非预期的结果,Operator Policy 只支持 expiremessage-ttlmax-lengthmax-length-bytes 4个参数。更多信息请参考 Difference From Regular Policies

    Policies 之间的优先级

    在设置Policy时需要注意,因为Policy是根据parttern匹配队列的,因此可能会出现多个Policy都匹配到某一个队列的情况,此时会依据以下规则进行排序选出实际生效的Policy:

    1. 首先根据priority排序,值越大的优先级越高;
    2. 相同priority则根据创建时间排序,越晚创建的优先级越高。
  • 相关阅读:
    LeetCode(13) - Roman to Integer
    LeetCode(12) - Integer to Roman
    LeetCode(11) - Container With Most Water
    LeetCode(10) - Regular Expression Matching
    asp.net Mvc 使用uploadify 上传文件 HTTP 302 Error
    DbEntry 4.2 建立关系时的一些问题
    Log4Net 日志文件分类保存
    JqGrid 隐藏水平滚动条完美解决方案
    WebSocket使用SuperWebSocket结合WindowsService实现实时消息
    LigerUI ligerComboBox 下拉框 表格 多选无效
  • 原文地址:https://www.cnblogs.com/larva-zhh/p/10954556.html
Copyright © 2011-2022 走看看