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. GEO Gene Expression Omnibus

    GEO  Gene Expression Omnibus 基因表达数据库 网址:https://www.ncbi.nlm.nih.gov/geo/ GEO的数据存储方式 GEO数据库具体存放四类数据: ...

  2. adb 常用命令一

    1.install 和uninstall adb -s 设备号 install 安装包路径   adb uninstall package名 2.pull 和push: adb pull /sdcar ...

  3. TermKit的新一代Mac终端,在Ubuntu 11.04 轻松安装TermKit

    作为开发人员的必备工具,终端程序却一直没有什么大的变化,TermKit旨在改变这一切,作为下一代的命令行/终端程序,TermKit为我们提供了一个图形化的终端/命令行程序,它可以以可视化的方式展示终端 ...

  4. A Full Hardware Guide to Deep Learning深度学习电脑配置

     https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博 ...

  5. kotlin基础 空值检查

    NULL检查机制 Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做 ...

  6. Spring @RequestMapping 参数说明

    @RequestMapping 参数说明: value:  指定请求的实际地址, 比如 /action/info之类.method:  指定请求的method类型, GET.POST.PUT.DELE ...

  7. electron-vue在使用element-ui时部分组件无法显示问题

    原文连接: https://juejin.im/post/5d132629e51d45772a49ad71 问题描述 在使用electron开发桌面系统时,遇到部分element-ui组件在页面中无法 ...

  8. New & make in go_Code

    概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似.不过解释两者之间的不同也非常容易. 他们所做的事情,和应用的类型也不相同. 二者都是用来分配空间. new 函数 ...

  9. SpringCloud学习笔记-Eureka基础

    Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的微服务治理功能. 服务端 ...

  10. IBM X3650 M4 安装 Windows Server 2008 R2

    1 准备好  Windows Server 2008 R2 安装用的U盘 2 采用PowerISO制作启动U盘: 或者用Rufus做启动U盘. 3 接上启动U盘 4 设置Bios启动模式为 UEFI ...