专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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

概述

由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理。

但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加入优先级队列特性。

查询资料后,得知RabbitMQ虽然官方没有支持此特性,但是社区已经有相关优先级队列插件了,并且这个插件被列在RabbitMQ官方网站中了。

地址如下:http://www.rabbitmq.com/community-plugins.html

72_1.png

插件安装

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

72_2.png

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

72_3.png

72_4.png

插件如何安装?

进入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文件拷贝过去,然后运行列举插件列表命令:

72_5.png

找到这个优先级队列插件名为:rabbitmq_priority_queue

执行:rabbitmq-plugins enable rabbitmq_priority_queue

ok,重新启动rabbitmq-server服务。

这样,server端的配置算完成了。

C#代码端需要作出的更改

下面看看客户端类库的编写:

我们先要定义优先级枚举,继承自byte,因为RabbitMQ的C#客户端优先级是用byte来传递的:

先定义3个级别的优先级:低、中、高(其实可以定义很多级别,只是为了简化,因此只定义了3个级别)

72_6.png

有2个地方需要改动:

1、 1. 申明队列时需要加入自定义的属性
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

文章永久链接:https://tech.souyunku.com/38926

未经允许不得转载:搜云库技术团队 » 如何基于RabbitMQ实现优先级队列

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们