RabbitMQ Policy的使用
RabbitMQ作为最流行的MQ中间件之一,广泛使用在各类系统中,今天我们就来讨论一下如何通过Policies给RabbitMQ中已经创建的Queue添加属性和参数。
Policise 的作用
通常来说,我们会在创建一个Queue时指定了队列的各项属性和参数,例如message-ttl、x-dead-letter-exchange、x-dead-letter-route-key、x-max-length等,一旦RabbitMQ创建Queue成功,则不允许再修改Queue的任何属性或参数,除非删除重建。
我们在实际使用中,随着业务的变化,经常会出现需要调整message-ttl、x-max-length等参数来改变Queue行为的场景,那这个时候怎么办呢,总不能暂停上下游的生产者和消费者来等Queue的删除重建吧?这个时候就需要使用到RabbitMQ的Policy机制了。
本文的重点是如何使用Policy,更多关于Policy的意义可参考 Why Policies Exist。
Policies 的使用
创建Policy
Policies是RabbitMQ的Server端机制,不能通过Client来创建,RabbitMQ支持以下几种方式来创建Policy:
- rabbitmqctl
- Http API
- Management Plugin Web UI
这里选择最直观的 Web UI方式来讲,Web UI创建Policy的界面在 Admin Tab页中的Policies右侧导航栏,如图:

点击进入后,可以看到4块内容,User Policies、Add / update a policy、Operator Policies、Add / 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 只支持 expire、message-ttl、max-length、max-length-bytes 4个参数。更多信息请参考 Difference From Regular Policies。
Policies 之间的优先级
在设置Policy时需要注意,因为Policy是根据parttern匹配队列的,因此可能会出现多个Policy都匹配到某一个队列的情况,此时会依据以下规则进行排序选出实际生效的Policy:
- 首先根据
priority排序,值越大的优先级越高; - 相同
priority则根据创建时间排序,越晚创建的优先级越高。
RabbitMQ Policy的使用的更多相关文章
- windows下 安装 rabbitMQ 及操作常用命令
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...
- 应用.Net+Consul维护RabbitMq的高可用性
懒人学习的过程就是工作中老大让干啥让做啥就研究研究啥,国庆放假回来的周末老大通过钉钉给我布置了个任务, RabbitMQ高可用解决方案,我想说钉钉太坑了: 这是国庆过后9号周日晚上下班给的任务,我周一 ...
- 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说 一下cluster的概念,rabbitmq是erl ...
- RabbitMQ 高可用集群搭建及电商平台使用经验总结
面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...
- RabbitMq 集群搭建
实验环境: 操作系统为 Centos 7.2 IP hostName 192.168.190.132 node132 192.168.190.139 node139 192.168.190.1 ...
- 理解 OpenStack 高可用(HA)(5):RabbitMQ HA
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信
本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...
- 分享 rabbitMQ入门详解
原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...
- RabbitMQ高可用方案总结
RabbitMQ的集群方案有以下几种: 1.普通的集群 exchange,buindling再所有的节点上都会保存一份,但是queue只会存储在其中的一个节点上,但是所有的节点都会存储一份queue的 ...
随机推荐
- oracle中union和union all区别与性能分析
[ 概要 ] 经常写sql的同学可能会用到union和union all这两个关键词, 可能你知道使用它们可以将两个查询的结果集进行合并, 那么二者有什么区别呢? 下面我们就简单的分析下. [ 比较 ...
- 第08组 Alpha冲刺(6/6)
队名:955 组长博客:https://www.cnblogs.com/cclong/p/11913269.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...
- [已解决] Python logging 重复打印日志信息
问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...
- bzoj4868 期末考试 题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4868 显然我们只关注最后出分的学科. 刚开始想的是dp,然而不知道如何记录状态. 突然就想到了正解 ...
- iptables只允许指定ip访问本机的指定端口
首先,清除所有预设置 iptables -F 其次,设置只允许指定ip地址访问指定端口 1.在tcp协议中,禁止所有的ip访问本机的1521端口. iptables -I INPUT -p tcp - ...
- 【Gamma】Scrum Meeting8
目录 写在前面 进度情况 任务进度表 燃尽图 照片 写在前面 例会时间:6.6 22:30-22:45 例会地点:微信群语音通话 代码进度记录github在这里 进度情况 任务进度表 注:点击链接跳转 ...
- Spring 事务小结
@Override@Transactionalpublic void add() { this.in();} public void in(){ NyOrder nyOrder=new NyOrder ...
- IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解
IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...
- Torch-Models 别人训练的FastNeuralStyle
This is the pink style's image: This is the triangle one: The fire ones come from this image: And th ...
- webRTC 基础介绍
WebRTC 全称为:Web Real-Time Communication.它是为了解决 Web 端无法捕获音视频的能力,并且提供了 peer-to-peer(就是浏览器间)的视频交互.实际上,细分 ...