问答文章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
卡耐基的智慧大全集内容简介 会说话赢天下内容简介 卡耐基演讲与口才内容简介 商务口才训练内容简介 卡耐基金牌口才作者简介 卡耐基商务口才 作者简介 爱因斯坦的更多故事 杨柯叶谨言是什么电视 房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 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 调整色相饱和度那块,有个着色的选框,这个具体是什么作用? 密度板的测量 密度板的表层密度怎么测 购买浪琴表等名牌手表的注意事项? 密度板密度一般是多少