国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

如何基于RabbitMQ實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

2019-11-17 01:50:51
字體:
供稿:網(wǎng)友

如何基于RabbitMQ實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

概述

由于種種原因,RabbitMQ到目前為止,官方還沒有實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列,只實(shí)現(xiàn)了Consumer的優(yōu)先級(jí)處理。

但是,迫于種種原因,應(yīng)用層面上又需要優(yōu)先級(jí)隊(duì)列,因此需求來了:如何為RabbitMQ加入優(yōu)先級(jí)隊(duì)列特性。

查詢資料后,得知RabbitMQ雖然官方?jīng)]有支持此特性,但是社區(qū)已經(jīng)有相關(guān)優(yōu)先級(jí)隊(duì)列插件了,并且這個(gè)插件被列在RabbitMQ官方網(wǎng)站中了。

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

插件安裝

不要立刻下載這個(gè)url中的那個(gè)鏈接,要先根據(jù)你想要更新目標(biāo)的rabbitmq版本再去另外一個(gè)地方下載相應(yīng)插件,如:

會(huì)列出兩大版本的插件目錄(選擇對(duì)應(yīng)目錄進(jìn)入下載,否則會(huì)報(bào)錯(cuò)...):

插件如何安裝?

進(jìn)入rabbitmq安裝目錄,進(jìn)入plugins目錄,將上面這個(gè)ez文件拷貝到plugins目錄中,然后運(yùn)行命令來enable這個(gè)插件

centos下,默認(rèn)路徑在:/usr/lib/rabbitmq/lib/rabbitmq_server-3.3.4/plugins(版本號(hào)可能會(huì)變化)

windows下,默認(rèn)路徑在:C:/PRogram Files/RabbitMQ Server/rabbitmq_server-3.3.4/plugins(版本號(hào)可能會(huì)變化)

把ez文件拷貝過去,然后運(yùn)行列舉插件列表命令:

找到這個(gè)優(yōu)先級(jí)隊(duì)列插件名為:rabbitmq_priority_queue

執(zhí)行:rabbitmq-plugins enable rabbitmq_priority_queue

ok,重新啟動(dòng)rabbitmq-server服務(wù)。

這樣,server端的配置算完成了。

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

下面看看客戶端類庫(kù)的編寫:

我們先要定義優(yōu)先級(jí)枚舉,繼承自byte,因?yàn)镽abbitMQ的C#客戶端優(yōu)先級(jí)是用byte來傳遞的:

先定義3個(gè)級(jí)別的優(yōu)先級(jí):低、中、高(其實(shí)可以定義很多級(jí)別,只是為了簡(jiǎn)化,因此只定義了3個(gè)級(jí)別)

有2個(gè)地方需要改動(dòng):

    1. 申明隊(duì)列時(shí)需要加入自定義的屬性
    2. 發(fā)送消息到rabbitmq時(shí),設(shè)置自定義屬性

internal static IDictionary<string, object> QueueArguments        {            get            {                IDictionary<string, object> arguments=new Dictionary<string, object>();                arguments["x-max-priority"] = 10;//定義隊(duì)列優(yōu)先級(jí)為10個(gè)級(jí)別                return arguments;            }        }

channel.QueueDeclare("queueName", true, false, false, QueueArguments);//QueueArguments就是上面定義的這個(gè)dictionary

var headers = channel.CreateBasicProperties();headers.Priority = (byte)msg.Priority;//在這里把繼承自byte的枚舉轉(zhuǎn)換成bytechannel.BasicPublish("exchange", "route", headers, SerializerUtility.Serialize2Bytes(msg));

其他注意的地方

在裝了優(yōu)先級(jí)隊(duì)列插件的rabbitmq-server實(shí)例中,所有的Durable隊(duì)列必須用如上的方式,設(shè)置x-max-priority屬性,否則rabbitmq-server服務(wù)會(huì)crash


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汕尾市| 德庆县| 成安县| 抚州市| 平湖市| 定州市| 普宁市| 天等县| 塔城市| 温州市| 宜黄县| 延庆县| 平顺县| 铜川市| 湟源县| 台中县| 姚安县| 阜平县| 澜沧| 宝丰县| 久治县| 大邑县| 会泽县| 文登市| 榆社县| 龙川县| 三门县| 江门市| 尉犁县| 天门市| 镶黄旗| 乐昌市| 乌拉特中旗| 于田县| 桦川县| 塔城市| 大悟县| 屏边| 横山县| 新密市| 衡东县|