问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何基于RabbitMQ实现优先级队列

发布网友 发布时间:2022-04-20 06:05

我来回答

1个回答

热心网友 时间:2022-04-06 11:19

概述
由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理。
但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加入优先级队列特性。
查询资料后,得知RabbitMQ虽然官方没有支持此特性,但是社区已经有相关优先级队列插件了,并且这个插件被列在RabbitMQ官方网站中了。
地址如下:http://www.rabbitmq.com/community-plugins.html

插件安装
不要立刻下载这个url中的那个链接,要先根据你想要更新目标的rabbitmq版本再去另外一个地方下载相应插件,如:

会列出两大版本的插件目录(选择对应目录进入下载,否则会报错...):

插件如何安装?
进入rabbitmq安装目录,进入plugins目录,将上面这个ez文件拷贝到plugins目录中,然后运行命令来enable这个插件
centos下,默认路径在:/usr/lib/rabbitmq/lib/rabbitmq_server-3.3.4/plugins(版本号可能会变化)
windows下,默认路径在:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.3.4\plugins(版本号可能会变化)
把ez文件拷贝过去,然后运行列举插件列表命令:

找到这个优先级队列插件名为:rabbitmq_priority_queue
执行:rabbitmq-plugins enable rabbitmq_priority_queue
ok,重新启动rabbitmq-server服务。
这样,server端的配置算完成了。

C#代码端需要作出的更改
下面看看客户端类库的编写:
我们先要定义优先级枚举,继承自byte,因为RabbitMQ的C#客户端优先级是用byte来传递的:
先定义3个级别的优先级:低、中、高(其实可以定义很多级别,只是为了简化,因此只定义了3个级别)

有2个地方需要改动:

申明队列时需要加入自定义的属性
发送消息到rabbitmq时,设置自定义属性

internal static IDictionary<string, object> QueueArguments
{
get
{
IDictionary<string, object> arguments=new Dictionary<string, object>();
arguments["x-max-priority"] = 10;//定义队列优先级为10个级别
return arguments;
}
}

channel.QueueDeclare("queueName", true, false, false, QueueArguments);//QueueArguments就是上面定义的这个dictionary

var headers = channel.CreateBasicProperties();

headers.Priority = (byte)msg.Priority;//在这里把继承自byte的枚举转换成byte

channel.BasicPublish("exchange", "route", headers, SerializerUtility.Serialize2Bytes(msg));

其他注意的地方
在装了优先级队列插件的rabbitmq-server实例中,所有的Durable队列必须用如上的方式,设置x-max-priority属性,否则rabbitmq-server服务会crash
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
啤酒保鲜桶(关于啤酒保鲜桶的基本详情介绍) 试用期可以随时离职走吗 玩吃鸡我需要换些什么部位、懂的帮帮忙 你好我不小心吃了鸡屁股这两边的肉,请问会不会有事,拜托,帮帮忙,谢谢... 谁有不要的吃鸡号?我只用来玩吃鸡,绝对不会盗号 不同症状使用的按摩精油 跪求一篇300字周记,主题是规范,麻烦各位大侠帮帮忙。要求初一水平,谢谢... ...平时吃止痛片,还是反复地疼,很是难受,牙疼吃什么药能见效?拜托... 17款奥迪A4加装自动折叠后视镜要多少钱? 奥迪A4L17款奥迪A4加装自动折叠后视镜要多少钱? win 7 rabbitmq 需要安装哪些 使用 RabbitMQ 为什么有时候会丢数据 windows下安装rabbitmq出现如下问题 rabbitMQ获取消息卡住 Rabbitmq怎么知道消费者执行是否成功 rabbitmq多线程下怎么保证不重复 rabbitmq的消费者是主动拉的吗 启动rabbitmq服务怎么的一直自动停 rabbitmq ha 方案 集群节点可以动态增加吗 RabbitMQ 运行中 突然 停止服务 php下rabbitmq怎么实现消费者自动触发 如何正确使用RabbitMQ? cf主播用什么辅助软件 跪求传奇仿盛大练习神秘解读的辅助工具!!!拜托... 什么辅助能过传奇龙族引擎 求一个传奇私服中能够一键锁人或者自动锁人的辅助... 传奇GM怎么设置透视爆率 谁知道传奇内挂辅助,加速器之类的 有的给个告诉在... 热血传奇现在辅助工具有什么? 传奇商业开F需要准备哪些必要的工具和辅助工具 为什么说rabbitmq 比kafka可靠 怎么实现rabbitmqconsumer rabbitmq 是tcp 还是udp rabbitmq 是tcp 还是http 怎么设置rabbitmq的队列的大小或长度 photoshop中的色相饱和度里有否着色是什么区别? 腌鸡蛋需要多长时间 腌鸡蛋多久可以吃 咸鸡蛋盐多长时间能吃,腌鸡蛋是一定要腌天吗 我自己在家淹了鸡蛋要多久? 鸡蛋淹多长时间最合适?怎么淹最好吃? 鸡蛋怎么腌制? 腌鸡蛋多长时间能吃 蒸咸鸡蛋需要多长时间 PS中&quot;色相/饱和度&quot;中&quot;着色&quot;复选框选与不选的区别? PS CS5 调整色相饱和度那块,有个着色的选框,这个具体是什么作用? 密度板的测量 密度板的表层密度怎么测 购买浪琴表等名牌手表的注意事项? 密度板密度一般是多少
  • 焦点

最新推荐

猜你喜欢

热门推荐