阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

122次阅读
没有评论

共计 2081 个字符,预计需要花费 6 分钟才能阅读完成。

概述

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

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

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

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

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

插件安装

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

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

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

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

如何基于 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 实现优先级队列

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

执行:rabbitmq-plugins enable rabbitmq_priority_queue

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

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

 

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

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

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

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

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

有 2 个地方需要改动:

    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

CentOS 5.6 安装 RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm

RabbitMQ 客户端 C ++ 安装详细记录 http://www.linuxidc.com/Linux/2012-02/53521.htm

用 Python 尝试 RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm

RabbitMQ 集群环境生产实例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm

Ubuntu 下 PHP + RabbitMQ 使用 http://www.linuxidc.com/Linux/2010-07/27309.htm

在 CentOS 上安装 RabbitMQ 流程 http://www.linuxidc.com/Linux/2011-12/49610.htm

RabbitMQ 概念及环境搭建 http://www.linuxidc.com/Linux/2014-12/110449.htm

RabbitMQ 入门教程  http://www.linuxidc.com/Linux/2015-02/113983.htm

RabbitMQ 的详细介绍 :请点这里
RabbitMQ 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/120929.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2081字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中