RabbitMQ入門學(xué)習(xí)系列(六) Exchange的Topic類型

快速閱讀

介紹exchange的topic類型埋酬,和Direct類型相似胳螟,但是增加了"."和"#"的匹配。比Direct類型靈活

Topic消息類型

特點(diǎn)是:topic消息類型不能是任意的routing key, 必須是有點(diǎn)"."組成的單詞列表。

和dirct類似层宫,最后也是也相應(yīng)的key進(jìn)行匹配

例如:speed.color.sepcies

注意可以用號(hào)和#號(hào)出現(xiàn),和我們?nèi)粘S玫恼齽t表達(dá)式含義相近*

"*"號(hào)代表任意一個(gè)單詞

"#"號(hào)代表0個(gè)或多個(gè)單詞

生產(chǎn)者代碼

  1. 創(chuàng)建連接和信道
  2. 聲明exchange類型
  3. 設(shè)置兩個(gè)routingkey 各自發(fā)送兩次其监。一共發(fā)送四條消息
static void Main(string[] args)
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
    {
        channel.ExchangeDeclare(exchange: "topicType", type: "topic");

        var list = new List<string>();
        list.Add("www.baidu.com");
        list.Add("www.google.com");
        for (var i = 0; i < 2; i++)
        {
            var routingKey = list[0];
            string message = "Hello World!this  message routingkey is  " + routingKey;
            var body = Encoding.UTF8.GetBytes(message);
            var properties = channel.CreateBasicProperties();
            properties.Persistent = true;

            channel.BasicPublish(exchange: "topicType",
                                 routingKey: routingKey,
                                 basicProperties: null,
                                 body: body);

            Console.WriteLine(" [x] Sent {0},id={1}", message,i);
            Thread.Sleep(1000);
        }

        for (var i = 0; i < 2; i++)
        {
            var routingKey = list[1];
            string message = "Hello World!this  message routingkey is  " + routingKey;
            var body = Encoding.UTF8.GetBytes(message);
            var properties = channel.CreateBasicProperties();
            properties.Persistent = true;

            channel.BasicPublish(exchange: "topicType",
                                 routingKey: routingKey,
                                 basicProperties: null,
                                 body: body);

            Console.WriteLine(" [x] Sent {0},id={1}", message, i);
            Thread.Sleep(1000);
        }

    }

    Console.WriteLine(" Press [enter] to exit.");
    Console.ReadLine();
} 

消費(fèi)者代碼

  1. 創(chuàng)建連接和信道
  2. 為了測(cè)試 topic 類型萌腿,限制輸入中含 有baidu,google兩個(gè)關(guān)鍵詞和發(fā)送的routing key相匹配。
  3. 聲明交換器類型
  4. 隊(duì)列聲明
  5. 把exchange和隊(duì)列綁定到信道上
  6. 接受消息
static void Main(string[] args)
{
    bool flag = true;
    string level = "";
    while (flag)
    {
        Console.WriteLine("請(qǐng)選擇要查看的消息類型");
        level = Console.ReadLine();
        if (level.IndexOf(".baidu.")>0 || level.IndexOf(".google.") > 0 )
            flag = false;
        else
            Console.Write("不支持你輸入的消息");
    }

    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare(exchange: "topicType", type: "topic");
            var queueName = channel.QueueDeclare().QueueName;
            channel.QueueBind(queue: queueName, exchange: "topicType", routingKey: level);
            //以下是區(qū)別生產(chǎn)者的
            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (sender, e) =>
            {
                var body = e.Body;
                var message = Encoding.UTF8.GetString(body);
                var rk = e.RoutingKey;
                Console.WriteLine("Received {0},routingKey:{1}", message, rk);
                Thread.Sleep(3000);//模擬耗時(shí)任務(wù) 抖苦,
                Console.WriteLine("Received over");
                channel.BasicAck(deliveryTag: e.DeliveryTag, multiple: false);
            };
            channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);
            Console.WriteLine("");
            Console.ReadLine();
        }

    }

測(cè)試結(jié)果

我們啟動(dòng)消費(fèi)者以后毁菱,輸入四個(gè)routingkey去測(cè)試

分別是

.google.#, #.google. , *.google.com, *.baidu.com

分別監(jiān)聽中間是google 或者baidu的消息

結(jié)果符合要求

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锌历,一起剝皮案震驚了整個(gè)濱河市贮庞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌究西,老刑警劉巖贸伐,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怔揩,居然都是意外死亡捉邢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門商膊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伏伐,“玉大人,你說我怎么就攤上這事晕拆∶牯幔” “怎么了材蹬?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吝镣。 經(jīng)常有香客問我堤器,道長,這世上最難降的妖魔是什么末贾? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任闸溃,我火速辦了婚禮,結(jié)果婚禮上拱撵,老公的妹妹穿的比我還像新娘辉川。我一直安慰自己,他們只是感情好拴测,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布乓旗。 她就那樣靜靜地躺著,像睡著了一般集索。 火紅的嫁衣襯著肌膚如雪屿愚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天务荆,我揣著相機(jī)與錄音渺鹦,去河邊找鬼。 笑死蛹含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塞颁。 我是一名探鬼主播浦箱,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼祠锣!你這毒婦竟也來了酷窥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤伴网,失蹤者是張志新(化名)和其女友劉穎蓬推,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澡腾,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沸伏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了动分。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毅糟。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澜公,靈堂內(nèi)的尸體忽然破棺而出姆另,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布迹辐,位于F島的核電站蝶防,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏明吩。R本人自食惡果不足惜间学,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贺喝。 院中可真熱鬧菱鸥,春花似錦、人聲如沸躏鱼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽染苛。三九已至鹊漠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茶行,已是汗流浹背躯概。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畔师,地道東北人娶靡。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像看锉,于是被迫代替她去往敵國和親姿锭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容