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则根据创建时间排序,越晚创建的优先级越高。

RabbitMQ Policy的使用的更多相关文章

  1. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  2. 应用.Net+Consul维护RabbitMq的高可用性

    懒人学习的过程就是工作中老大让干啥让做啥就研究研究啥,国庆放假回来的周末老大通过钉钉给我布置了个任务, RabbitMQ高可用解决方案,我想说钉钉太坑了: 这是国庆过后9号周日晚上下班给的任务,我周一 ...

  3. 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接

    我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说 一下cluster的概念,rabbitmq是erl ...

  4. RabbitMQ 高可用集群搭建及电商平台使用经验总结

    面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...

  5. RabbitMq 集群搭建

        实验环境: 操作系统为 Centos 7.2 IP hostName 192.168.190.132 node132 192.168.190.139 node139 192.168.190.1 ...

  6. 理解 OpenStack 高可用(HA)(5):RabbitMQ HA

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  7. 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信

    本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...

  8. 分享 rabbitMQ入门详解

    原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...

  9. RabbitMQ高可用方案总结

    RabbitMQ的集群方案有以下几种: 1.普通的集群 exchange,buindling再所有的节点上都会保存一份,但是queue只会存储在其中的一个节点上,但是所有的节点都会存储一份queue的 ...

随机推荐

  1. 数据库的范式(1NF、2NF、3NF、BCNF)转载

    文章属于转载:https://www.cnblogs.com/hi-bazinga/archive/2012/06/05/2536806.html 第一范式:关系模式中,每个属性不可再分.属性原子性第 ...

  2. 本地局域网yum源搭建-centos/redhat

    环境-centos6.7  [本机yum搭建提前备好,不做介绍] [root@nagios ~]# cat /etc/redhat-release CentOS release 6.7 (Final) ...

  3. 这个中秋,我用 Java 画了一个月饼!

    栈长代表微信公众号 "Java技术栈" 祝所有粉丝中秋佳节快乐! 为了用一种特殊的方式表达我的心意,去年中秋节,我写了这篇文章: 为了写中秋这篇文章,我学了 20 种编程语言! 没 ...

  4. mysql数据库数据入库时间跟当前时间差了8个小时

    vim /etc/my.cnf[mysqld]default-time_zone = '+8:00'重启mysql服务./etc/init.d/mysqld restart 未测试

  5. fastjson在反序列化时,解析对象中的继承,抽象类处理

    LimitActionConfig是ActionConfig的子类,RuleConfig的有个属性是ActionConfig,需要反序列化成LimitActionConfig ParserConfig ...

  6. MySQL百万级数据分页查询及优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

  7. js开启和关闭页面滚动【亲测有效】

    在移动端的页面开发过程中,经常会遇到点击弹框禁止页面滚动的情景,下面就来说下具体的做法... 第一步:构建一个函数 function bodyScroll(event){ event.preventD ...

  8. SpringBoot项目中的全局异常处理器 Failed to invoke @ExceptionHandler method

    文件下载代码 @RequestMapping(value = { "/data/docking/picture/{id}/{empi}" }) public JsonApi pic ...

  9. 设置ESXi宿主机开机自动启动虚拟机

    转载于 https://blog.csdn.net/Form_/article/details/71170813 在百度上面找了一圈都是讲ESXi6.0之前的版本,在VMware vSphere Cl ...

  10. ajaxSubmit的data属性

    https://www.cnblogs.com/shiyou00/p/6841801.html js-art-template 修改一处代码的时候发现了让我疑惑的地方.ajaxSubmit的data用 ...