国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

它讓你1小時(shí)精通RabbitMQ消息隊(duì)列、且能扛高并發(fā)

這篇具有很好參考價(jià)值的文章主要介紹了它讓你1小時(shí)精通RabbitMQ消息隊(duì)列、且能扛高并發(fā)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

支持.Net Core(2.0及以上)與.Net Framework(4.5及以上)

本文所述方案近期被江蘇省某億級數(shù)據(jù)量+高并發(fā)的政府"物聯(lián)網(wǎng)"項(xiàng)目采用,獲得圓滿成功?。?/span>

【目錄】

  1. 發(fā)送消息、獲取消息、使用消息

  2. 延時(shí)隊(duì)列 & 死信隊(duì)列

  3. 展望

RabbitMQ作為一款主流的消息隊(duì)列工具早已廣受歡迎。相比于其它的MQ工具,RabbitMQ支持的語言更多、功能更完善。

1.發(fā)送消息、獲取消息、使用消息

本文提供一種市面上最/極簡單的使用RabbitMQ的方式,只需要會調(diào)用以下三個(gè)方法,你就幾乎可以掌握整個(gè)RabbitMQ的使用:

(1)???? SendMessage,發(fā)送一個(gè)消息

(2)???? GetMessage,獲取一個(gè)消息

(3)???? UseMessage,使用一個(gè)消息(連續(xù)使用)

?

為了調(diào)用以上三個(gè)方法,首先需要從NuGet引用DeveloperSharp.RabbitMQ包。

然后,對RabbitMQ消息服務(wù)器的鏈接信息進(jìn)行配置(分.Net Core與.Net Framework兩種情況):

若是在.Net Core環(huán)境下,你則需要在appsettings.json文件中添加“DeveloperSharp.RabbitMQ”節(jié)點(diǎn)(如下配置示例),并把a(bǔ)ppsettings.json文件放到程序執(zhí)行目錄中(即bin目錄下與dll、exe等文件的同一目錄中)(放錯(cuò)了位置會報(bào)錯(cuò))

{
  "DeveloperSharp.RabbitMQ":[{
    "HostName":"135.208.12.236",
    "UserName":"sa",
    "Password":"aevin.gang",
    "Port":5672
  }]
}

?

若是在.Net Framework環(huán)境下,你則需要在App.config/Web.config里面添加如下配置:

  <appSettings>
    <add key="RabbitMQConnectionString" value="hostName=135.208.12.236,port=5672,userName=sa,password=aevin.gang" />
  </appSettings>

說明:上述配置中分別設(shè)置了RabbitMQ應(yīng)用所在的服務(wù)器IP地址hostName、端口port、用戶名userName、密碼password(請把這四項(xiàng)的對應(yīng)值修改成你自己那邊的RabbitMQ的對應(yīng)值)

?

下面,我們給出一個(gè)使用了上述SendMessage、GetMessage、UseMessage三個(gè)方法的示例。該示例的功能說明如下:

  • 先向RabbitMQ服務(wù)器上名為“aa”的隊(duì)列發(fā)送了5個(gè)消息,
  • 然后從RabbitMQ服務(wù)器上的“aa”隊(duì)列中獲取,并打印出第1個(gè)消息,
  • 最后再連續(xù)從RabbitMQ服務(wù)器上的“aa”隊(duì)列中獲取剩余4個(gè)消息,并把它們寫入名為fj.txt的文件。

代碼如下:

using DeveloperSharp.RabbitMQ;
--------------------------

        static void Main(string[] args)
        {
            //發(fā)送5個(gè)消息(使用SendMessage)
            RabbitMQHelper.SendMessage("aa", "世界1,你好!");
            RabbitMQHelper.SendMessage("aa", "世界2,你好!");
            RabbitMQHelper.SendMessage("aa", "世界3,你好!");
            RabbitMQHelper.SendMessage("aa", "世界4,你好!");
            RabbitMQHelper.SendMessage("aa", "世界5,你好!");

            //獲取1個(gè)消息(使用GetMessage)
            string OneMessage = RabbitMQHelper.GetMessage("aa").Message;
            Console.WriteLine(OneMessage);

            //向fj.txt這個(gè)文本文件中寫入4個(gè)消息(使用UseMessage)
            RabbitMQHelper.UseMessage("aa", t => 
            {
                System.IO.File.AppendAllText("D:/fj.txt", t.Message);
                return true;
            });
        }

運(yùn)行結(jié)果如下:

【控制臺顯示出】:世界1,你好!

【fj.txt文件中顯示出】:世界2,你好!世界3,你好!世界4,你好!世界5,你好!

?

(上述示例中,由于SendMessage是同步方法,故“世界1,你好!”~“世界5,你好!”會按順序顯示。若我們把SendMessage方法全部改為異步的SendMessageAsync,則顯示結(jié)果將不再是按順序來的,很有可能顯示成類似這樣:“世界3,你好!世界1,你好!世界5,你好!世界2,你好!世界4,你好!”)

?

三個(gè)方法的詳細(xì)功能說明(輔助參考):

1)發(fā)送一個(gè)消息
void SendMessage(string QueueName, string Message, Dictionary<string, object> Header = null)
//異步方法:SendMessageAsync
2)獲取一個(gè)消息
RabbitMQMessage GetMessage(string QueueName)
//異步方法:GetMessageAsync
3)使用一個(gè)消息(連續(xù)使用)
void UseMessage(string QueueName, Func<RabbitMQMessage, bool?> Use)
//異步方法:UseMessageAsync
附加說明:
    (I)Use返回值為true時(shí),代表當(dāng)前消息已被有效處理并會被服務(wù)器刪除。然后程序自動(dòng)進(jìn)入下一條消息的使用。
         若Use返回值為false時(shí),代表當(dāng)前消息未被有效處理但仍會被服務(wù)器刪除。然后程序自動(dòng)進(jìn)入下一條消息的使用。
         若Use返回值為null時(shí),代表當(dāng)前消息會被服務(wù)器重新隊(duì)列分配到其它可用的實(shí)例上再處理。然后程序自動(dòng)進(jìn)入下一條消息的使用。
         若Use內(nèi)部發(fā)生未被處理的異常,程序會停止。
    (II)RabbitMQMessage對象定義如下:
          public class RabbitMQMessage
          {
             public string Message;
             public IDictionary<string, object> Header;
             public string Id; //此處系統(tǒng)自動(dòng)生成的Id是分布式唯一Id。
          }

?

2.延時(shí)隊(duì)列 & 死信隊(duì)列

有些場景下,我們希望為使用的消息設(shè)定有效期。在有效期內(nèi),這些消息有效可用;但過期后,這些消息將變得無效不可用,同時(shí),它們還將自動(dòng)被丟棄進(jìn)一個(gè)稱之為“死信”的隊(duì)列。

為了說明這些概念,我們還是來舉一個(gè)具體的例子。該例子的功能說明如下:

  • 首先,在RabbitMQ服務(wù)器上定義一個(gè)名為"bbq"、且其中存放的消息會在60秒后過期失效的隊(duì)列。
  • 然后,在RabbitMQ服務(wù)器上定義一個(gè)與"bbq"隊(duì)列對應(yīng)的死信隊(duì)列。并連續(xù)從該死信隊(duì)列中獲取消息并把它們寫入名為BB.txt的文件。
  • 最后,向RabbitMQ服務(wù)器上的"bbq"隊(duì)列發(fā)送3個(gè)消息。

?代碼如下:

using DeveloperSharp.RabbitMQ;//從NuGet引用DeveloperSharp.RabbitMQ包
--------------------------

            //定義bbq隊(duì)列,其中存放的消息會在60秒后過期
            var myQ = RabbitMQHelper.SetQueue("bbq", 60000);

            //定義與bbq隊(duì)列對應(yīng)的死信隊(duì)列
            var expQ = RabbitMQHelper.GetQueue("bbq");
            //向BB.txt這個(gè)文本文件中連續(xù)寫入死信隊(duì)列中的消息
            expQ.UseMessage(t =>
            {
                System.IO.File.AppendAllText("D:/BB.txt", t.Message);
                return true;
            });

            //向bbq隊(duì)列發(fā)送3個(gè)消息
            myQ.SendMessage("jinA");
            myQ.SendMessage("jinB");
            myQ.SendMessage("jinC");

            /*
            //【附加題】:若去掉注釋讓此語句執(zhí)行,死信隊(duì)列中將不會獲得消息(為啥?自己推理)
            RabbitMQHelper.UseMessage("bbq", t =>
            {
                return true;//若此處返回false,死信隊(duì)列將會獲得消息
            });
            */

運(yùn)行以上程序:

60秒之內(nèi),【BB.txt文件】中沒有內(nèi)容

60秒以后,【BB.txt文件】中顯示出:jinAjinBjinC

?

通過以上例子,我們可簡單預(yù)測一下,延時(shí)隊(duì)列&死信隊(duì)列常用在“限時(shí)消費(fèi)”、“過期處理”等場景。生活中最常見示例如:訂單請?jiān)?0分鐘內(nèi)支付完畢、等等之類功能...

?

(其它說明:為了演示便利,文本前面給出的幾個(gè)代碼示例中,把SendMessage、GetMessage、UseMessage三個(gè)方法都放到了同一段代碼程序中,這樣做不好,偶爾會造成一些資源沖突。在實(shí)際使用中,最好是把它們分開分別放到三段不同的代碼程序中,以獲取最佳效果。比如:三個(gè)按鈕,之類...)

?

使用消息服務(wù)對解耦分布式系統(tǒng)、實(shí)現(xiàn)發(fā)布/訂閱、提高系統(tǒng)性能、等方面都有巨大用處,相信本文會擴(kuò)展你的思維認(rèn)知,讓你在相關(guān)技術(shù)解決方案上有更多靈活思路+聯(lián)想空間!

?

原文鏈接:http://www.developersharp.cc/content12.html

結(jié)尾


下面是我的公眾號,里面有很多高價(jià)值技術(shù)文章,是你刻苦努力也積累不到的經(jīng)驗(yàn),能助力個(gè)人快速成長。

你也可以加入我們(添加微信:894988403,備注“進(jìn)群”),向大佬學(xué)習(xí),探行業(yè)內(nèi)幕,享時(shí)代機(jī)遇。

它讓你1小時(shí)精通RabbitMQ消息隊(duì)列、且能扛高并發(fā)文章來源地址http://www.zghlxwxcb.cn/news/detail-711446.html

到了這里,關(guān)于它讓你1小時(shí)精通RabbitMQ消息隊(duì)列、且能扛高并發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【RabbitMQ】消息隊(duì)列-RabbitMQ篇章

    【RabbitMQ】消息隊(duì)列-RabbitMQ篇章

    RabbitMQ是一個(gè)開源的 遵循AMQP協(xié)議 實(shí)現(xiàn)的基于Erlang語言編寫,支持多種客戶端(語言)。用于在分布式系統(tǒng)中 存儲消息,轉(zhuǎn)發(fā)消息 ,具有 高可用 , 高可擴(kuò)性 , 易用性 等特征。 1.1、RabbitMQ—使用場景 一般場景 像一般的下訂單業(yè)務(wù)如下圖: 將訂單信息寫入數(shù)據(jù)庫成功后,發(fā)

    2024年02月12日
    瀏覽(20)
  • 【RabbitMQ筆記10】消息隊(duì)列RabbitMQ之死信隊(duì)列的介紹

    【RabbitMQ筆記10】消息隊(duì)列RabbitMQ之死信隊(duì)列的介紹

    這篇文章,主要介紹消息隊(duì)列RabbitMQ之死信隊(duì)列。 目錄 一、RabbitMQ死信隊(duì)列 1.1、什么是死信隊(duì)列 1.2、設(shè)置過期時(shí)間TTL 1.3、配置死信交換機(jī)和死信隊(duì)列(代碼配置) (1)設(shè)置隊(duì)列過期時(shí)間 (2)設(shè)置單條消息過期時(shí)間 (3)隊(duì)列設(shè)置死信交換機(jī) (4)配置的基本思路 1.4、配置

    2024年02月16日
    瀏覽(95)
  • 消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    1、延遲隊(duì)列概念 延時(shí)隊(duì)列內(nèi)部是有序的 , 最重要的特性 就體現(xiàn)在它的 延時(shí)屬性 上,延時(shí)隊(duì)列中的元素是希望在指定時(shí)間到了以后或之前取出和處理,簡單來說, 延時(shí)隊(duì)列就是用來存放需要在指定時(shí)間被處理的元素的隊(duì)列。 延遲隊(duì)列使用場景: 訂單在十分鐘之內(nèi)未支付則

    2024年02月22日
    瀏覽(20)
  • RabbitMQ 消息中間件 消息隊(duì)列

    RabbitMQ 消息中間件 消息隊(duì)列

    RabbitMQ 1、RabbitMQ簡介 RabbiMQ是?Erang開發(fā)的,集群?常?便,因?yàn)镋rlang天?就是??分布式語?,但其本身并 不?持負(fù)載均衡。支持高并發(fā),支持可擴(kuò)展。支持AJAX,持久化,用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。 2、RabbitMQ 特點(diǎn) 可

    2024年02月03日
    瀏覽(93)
  • 消息隊(duì)列-RabbitMQ:workQueues—工作隊(duì)列、消息應(yīng)答機(jī)制、RabbitMQ 持久化、不公平分發(fā)(能者多勞)

    消息隊(duì)列-RabbitMQ:workQueues—工作隊(duì)列、消息應(yīng)答機(jī)制、RabbitMQ 持久化、不公平分發(fā)(能者多勞)

    Work Queues— 工作隊(duì)列 (又稱任務(wù)隊(duì)列) 的主要思想是避免立即執(zhí)行資源密集型任務(wù),而不得不等待它完成 。 我們把任務(wù)封裝為消息并將其發(fā)送到隊(duì)列,在后臺運(yùn)行的工作進(jìn)程將彈出任務(wù)并最終執(zhí)行作業(yè)。當(dāng)有多個(gè)工作線程時(shí),這些工作線程將一起處理這些任務(wù) 。 輪訓(xùn)分發(fā)消

    2024年02月21日
    瀏覽(23)
  • 【RabbitMQ】RabbitMQ 消息的堆積問題 —— 使用惰性隊(duì)列解決消息的堆積問題

    【RabbitMQ】RabbitMQ 消息的堆積問題 —— 使用惰性隊(duì)列解決消息的堆積問題

    消息的堆積問題是指在消息隊(duì)列系統(tǒng)中,當(dāng)生產(chǎn)者以較快的速度發(fā)送消息,而消費(fèi)者處理消息的速度較慢,導(dǎo)致消息在隊(duì)列中積累并達(dá)到隊(duì)列的存儲上限。在這種情況下,最早被發(fā)送的消息可能會在隊(duì)列中滯留較長時(shí)間,直到超過隊(duì)列的容量上限。當(dāng)隊(duì)列已滿且沒有更多的可

    2024年02月05日
    瀏覽(19)
  • 消息隊(duì)列之RabbitMQ介紹

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加 消息隊(duì)列之RabbitMQ介紹 提示:寫完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 在當(dāng)今的分布式系統(tǒng)和微服務(wù)架構(gòu)中,消息隊(duì)列扮演著至關(guān)

    2024年01月18日
    瀏覽(22)
  • RabbitMQ ---- 消息隊(duì)列

    RabbitMQ ---- 消息隊(duì)列

    MQ(message queue),從字面意思上看,本質(zhì)是個(gè)隊(duì)列,F(xiàn)IFO 先入先出,只不過隊(duì)列中存放的內(nèi)容是message 而已,還是一種跨進(jìn)程的通信機(jī)制,用于上下游傳遞消息。在互聯(lián)網(wǎng)架構(gòu)中,MQ 是一種非常常見的上下游“邏輯解耦+物理解耦”的消息通信服務(wù)。使用了 MQ 之后,消息發(fā)送上游

    2024年02月16日
    瀏覽(2)
  • RabbitMQ消息隊(duì)列全面解析

    RabbitMQ消息隊(duì)列全面解析

    微服務(wù)間通訊有同步和異步兩種方式: 同步通訊 :就像打電話,需要實(shí)時(shí)響應(yīng)。 異步通訊 :就像發(fā)郵件,不需要馬上回復(fù)。 1. 1同步通訊 我們之前學(xué)習(xí)的Feign調(diào)用就屬于同步方式,雖然調(diào)用可以實(shí)時(shí)得到結(jié)果,但存在下面的問題: 同步調(diào)用的優(yōu)點(diǎn): 時(shí)效性較強(qiáng),可以立即

    2024年02月08日
    瀏覽(38)
  • 消息隊(duì)列|RabbitMQ入門概述

    消息隊(duì)列|RabbitMQ入門概述

    MQ(message queue) ,在互聯(lián)網(wǎng)架構(gòu)中,MQ 是一種非常常見的上下游“ 邏輯解耦+物理解耦 ”的消息通信服務(wù)。使用了 MQ 之后,消息發(fā)送上游只需要依賴 MQ,不用依賴其他服務(wù)。MQ多用于分布式系統(tǒng)之間進(jìn)行通信。 換句話說: 有一個(gè)大的系統(tǒng)由A系統(tǒng)和B系統(tǒng)組成,A系統(tǒng)先將數(shù)據(jù)發(fā)

    2024年02月02日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包