日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ headers Exchange

發布時間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ headers Exchange 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Headers Exchange

headers也是一種交換機類型,但是在rabbitmq官網中的教程中并沒有說到。資料也很少,但是找一找總會有的。

headers與direct的模式不同,不是使用routingkey去做綁定。而是通過消息headers的鍵值對匹配

發布者? -- >? headersexchange? -->? (user:? “小明 ”) binding? --> queue

也就是說 user: 小明 替代了之前的routingkey。在做綁定的時候有兩種匹配方式供選擇。x-match (all/any)

意思就是鍵值對中所有的項都要匹配與只要有一個匹配就可以。下面就可以動手寫代碼了

?

在生產消息的時候,我們往消息的headers中附加了user:admin,pwd:123456

//創建返回一個新的頻道using (var channel = RabbitMqHelper.GetConnection().CreateModel()){//創建propertiesvar properties = channel.CreateBasicProperties();//往內容的headers中塞入值 properties.Headers = new Dictionary<string, object>(){{"user","admin" },{"pwd","123456" }};//發布一個消息var msg = Encoding.UTF8.GetBytes($"二狗子");channel.BasicPublish("headersExchange", routingKey: string.Empty, basicProperties: properties,body: msg);Console.Write("發布成功!");}Console.ReadKey();

在consumer中,我們可以選擇創建兩種方式,any/all。綁定的時候我們放了一些匹配項在里面,也就是如果 user:admin、pwd:123456 headers類型的exchange就可以把消息推到queue中

bool flag = true;string pattern = "";while (flag){Console.WriteLine("請選擇headers匹配模式 1(any)/2(all)");pattern = Console.ReadLine();if (pattern == "1" || pattern == "2")flag = false;elseConsole.Write("請做出正確的選擇");}using (var channel = RabbitMqHelper.GetConnection().CreateModel()){//根據聲明使用的隊列var headersType = pattern == "1" ? "any" : "all";//聲明交換機 headers模式channel.ExchangeDeclare("headersExchange", ExchangeType.Headers, true, false);channel.QueueDeclare("headersQueue", true, false, false, null);//進行綁定channel.QueueBind("headersQueue", "headersExchange", string.Empty, new Dictionary<string, object>{//第一個匹配格式 ,第二與第三個則是匹配項{ "x-match",headersType},{ "user","admin"},{ "pwd","123456"}});//創建consumbersvar consumer = new EventingBasicConsumer(channel);consumer.Received += (sender, e) =>{var msg = Encoding.UTF8.GetString(e.Body);Console.WriteLine($"{msg}");};//進行消費channel.BasicConsume("headersQueue", true, consumer);Console.ReadKey();}

?

這里實驗一個all類型的,首先把consumer運行起來,第一次我們的生產者的headers中只一個項匹配,可以看到消息是發布出去了,但是consumer并沒有從queue中收到,也就是這邊是不匹配的 exchange并沒有把消息推到queue。

在webui中也是可以看到queue中是沒有任何消息的

?

這時再把生產者的headers中user也加上,現在是完全匹配的再發布一次消息,發布的消息被consumer消費掉了

轉載于:https://www.cnblogs.com/LiangSW/p/6201940.html

總結

以上是生活随笔為你收集整理的RabbitMQ headers Exchange的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。