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

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī))

這篇具有很好參考價(jià)值的文章主要介紹了C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡(jiǎn)介

發(fā)布訂閱模式允許一個(gè)生產(chǎn)者向多個(gè)消費(fèi)者發(fā)送消息。在RabbitMQ中實(shí)現(xiàn)發(fā)布訂閱模式通常涉及以下幾個(gè)關(guān)鍵組件:

  1. 生產(chǎn)者:負(fù)責(zé)生產(chǎn)并發(fā)送消息到RabbitMQ的Exchange(路由器)。
  2. Exchange:作為消息的中轉(zhuǎn)站,根據(jù)不同的規(guī)則將消息路由到一個(gè)或多個(gè)隊(duì)列。
  3. 隊(duì)列:存儲(chǔ)消息的緩沖區(qū),每個(gè)消費(fèi)者有自己的獨(dú)立隊(duì)列。
  4. 消費(fèi)者:從自己的隊(duì)列中接收并消費(fèi)消息。

在這種模式下,生產(chǎn)者發(fā)送的消息不是直接發(fā)送到特定的隊(duì)列,而是發(fā)送給Exchange。Exchange根據(jù)配置的規(guī)則決定如何處理這些消息。例如,它可以將消息路由到一個(gè)特定的隊(duì)列,也可以將消息路由到多個(gè)隊(duì)列,或者在某些情況下廢棄消息。

在實(shí)際應(yīng)用中,發(fā)布訂閱模式常用于構(gòu)建實(shí)時(shí)通信系統(tǒng)、通知服務(wù)、日志系統(tǒng)等場(chǎng)景,其中多個(gè)消費(fèi)者需要接收來自同一生產(chǎn)者的消息。這種模式的優(yōu)勢(shì)在于能夠?qū)崿F(xiàn)一對(duì)多的通信,使得消息的分發(fā)更加靈活和高效。

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī)),RabbitMQ,rabbitmq,分布式,發(fā)布訂閱模式

?生產(chǎn)者代碼

在前面的模式中,我們使用了channel.QueueDeclare()來聲明隊(duì)列。這里不需要了

channel.QueueDeclare("hello", true, false, false, null);

在發(fā)布訂閱模式中,生產(chǎn)者只需要將消息發(fā)送到交換機(jī)上,然后由交換機(jī)根據(jù)綁定規(guī)則將消息路由到一個(gè)或多個(gè)隊(duì)列中。消費(fèi)者則可以從自己的隊(duì)列中獲取并處理這些消息。

因此,我們這里只聲明一個(gè)扇形交換機(jī),并將消息發(fā)布到該交換機(jī)上即可。而具體的隊(duì)列聲明和綁定操作可以在消費(fèi)者端進(jìn)行。

在前面的第一章和第二章中,我們都沒有聲明交換機(jī),這是因?yàn)镽abbitMQ中有一個(gè)默認(rèn)的交換機(jī),稱為空字符串名稱的默認(rèn)交換機(jī)。當(dāng)生產(chǎn)者發(fā)送消息但沒有指定交換機(jī)時(shí),消息會(huì)被發(fā)送到這個(gè)默認(rèn)交換機(jī)。同樣,當(dāng)創(chuàng)建隊(duì)列但沒有指定隊(duì)列與交換機(jī)的綁定關(guān)系時(shí),隊(duì)列會(huì)自動(dòng)綁定到默認(rèn)交換機(jī)上。RabbitMQ提供了幾種內(nèi)置的交換機(jī)類型,如直接交換(direct)、扇形交換(fanout)、主題交換(topic)和頭交換(headers)等,以滿足不同的業(yè)務(wù)場(chǎng)景需求。

class MyClass
{
    public static void Main(string[] args)
    {
        var factory = new ConnectionFactory();
        factory.HostName = "localhost"; //RabbitMQ服務(wù)在本地運(yùn)行
        factory.UserName = "guest"; //用戶名
        factory.Password = "guest"; //密碼

        //創(chuàng)建連接
        using (var connection = factory.CreateConnection())
        {
            //創(chuàng)建通道
            using (var channel = connection.CreateModel())
            {
                //聲明了一個(gè)扇形交換機(jī)(fanout exchange),命名為"hello"
                channel.ExchangeDeclare("hello", "fanout");

                string msg;
                Console.WriteLine("請(qǐng)輸入要發(fā)送的消息內(nèi)容:");
                while (!string.IsNullOrEmpty(msg = Console.ReadLine()))
                {
                    var body = Encoding.UTF8.GetBytes(msg);

                    channel.BasicPublish("hello", "", null, body); //開始傳遞
                    Console.WriteLine("已發(fā)送: {0}", msg);
                }
            }
        }
    }
}

消費(fèi)者代碼

我們通過channel.QueueDeclare().QueueName;聲明一個(gè)新的隊(duì)列,如果這個(gè)方法聲明隊(duì)列,RabbitMQ會(huì)自動(dòng)為你生成一個(gè)獨(dú)一無二的隊(duì)列名稱

var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queueName, "hello", "");

然后將隊(duì)列的名稱賦值給變量queueName。將該隊(duì)列綁定到之前聲明的扇形交換機(jī)hello上,使用空字符串作為路由鍵。每次運(yùn)行這個(gè)項(xiàng)目時(shí),都會(huì)創(chuàng)建一個(gè)新的隊(duì)列并將其綁定到交換機(jī)上。這樣,多個(gè)消費(fèi)者可以同時(shí)連接到同一個(gè)交換機(jī),并從不同的隊(duì)列中接收消息。

class MyClass
{
    static void Main(string[] args)
    {
        //創(chuàng)建連接工廠
        var factory = new ConnectionFactory();
        factory.HostName = "localhost";
        factory.UserName = "guest";
        factory.Password = "guest";
        //創(chuàng)建連接
        using (var connection = factory.CreateConnection())
        {
            //創(chuàng)建通道
            using (var channel = connection.CreateModel())
            {
                //聲明了一個(gè)扇形交換機(jī)(fanout exchange),命名為"hello"
                channel.ExchangeDeclare("hello", "fanout");
                
                //聲明一個(gè)新的隊(duì)列,并將這個(gè)隊(duì)列的名稱賦值給變量 queueName
                var queueName = channel.QueueDeclare().QueueName;
                channel.QueueBind(queueName, "hello", "");
                //事件的基本消費(fèi)者
                var consumer = new EventingBasicConsumer(channel);

                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);

                    Console.WriteLine("已接收: {0}", message);
                };

                channel.BasicConsume(queueName, true, consumer);
                Console.ReadKey();
            }
        }
    }
}

代碼演示

和我前面文章的步驟一樣,將消費(fèi)者先進(jìn)行發(fā)布打包,雙擊.exe文件運(yùn)行多次項(xiàng)目。

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī)),RabbitMQ,rabbitmq,分布式,發(fā)布訂閱模式

我們前面提到的使用channel.QueueDeclare().QueueName;聲明一個(gè)新的隊(duì)列,在RabbitMQ管理界面可以看到有三個(gè)自動(dòng)生成名稱的隊(duì)列。

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī)),RabbitMQ,rabbitmq,分布式,發(fā)布訂閱模式

然后我們啟動(dòng)生產(chǎn)者,并隨機(jī)發(fā)送幾條消息

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī)),RabbitMQ,rabbitmq,分布式,發(fā)布訂閱模式

再回到消費(fèi)者,我們運(yùn)行的三個(gè)消費(fèi)端都同時(shí)的收到了消息!

C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī)),RabbitMQ,rabbitmq,分布式,發(fā)布訂閱模式文章來源地址http://www.zghlxwxcb.cn/news/detail-833252.html

到了這里,關(guān)于C#使用RabbitMQ-3_發(fā)布訂閱模式(扇形交換機(jī))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring RabbitMQ那些事(1-交換機(jī)配置&消息發(fā)送訂閱實(shí)操)

    Spring RabbitMQ那些事(1-交換機(jī)配置&消息發(fā)送訂閱實(shí)操)

    在上一節(jié) RabbitMQ中的核心概念和交換機(jī)類型 中我們介紹了RabbitMQ中的一些核心概念,尤其是各種交換機(jī)的類型,接下來我們將具體講解各種交換機(jī)的配置和消息訂閱實(shí)操。 我們先上應(yīng)用啟動(dòng)配置文件 application.yml ,如下: 備注:這里我們指定了 RabbitListenerContainerFactory 的類型

    2024年01月17日
    瀏覽(24)
  • 利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    目錄 一、前期項(xiàng)目環(huán)境準(zhǔn)備 1.1父項(xiàng)目以及子項(xiàng)目 1.2配置pom.xml 1.3配置application.yml 二、扇出(Fanout)?交換機(jī)實(shí)現(xiàn)消息的發(fā)送和接收 2.1編寫子項(xiàng)目consumer(消費(fèi)者,接收消息)的代碼實(shí)現(xiàn)扇出(Fanout)交換機(jī)接收消息 2.1.1consumer子項(xiàng)目結(jié)構(gòu) 2.1.2FanoutConfig類的實(shí)現(xiàn)扇出(Fanout)交

    2024年02月05日
    瀏覽(95)
  • RabbitMQ發(fā)布與訂閱模式類型

    RabbitMQ發(fā)布與訂閱模式類型

    ??博客主頁:??不會(huì)壓彎的小飛俠 ?歡迎關(guān)注:??點(diǎn)贊??收藏?留言? ?系列專欄:??Linux專欄 ??歡迎大佬指正,一起學(xué)習(xí)!一起加油! 工作隊(duì)列背后的假設(shè)是每個(gè)任務(wù)都是 只交付給一名工人。在這一部分中,我們將做一些事情 完全不同的 - 我們將向多個(gè)傳遞消息 消

    2024年02月02日
    瀏覽(22)
  • RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    MQ(message queue):本質(zhì)上是個(gè)隊(duì)列,遵循FIFO原則,隊(duì)列中存放的是message,是一種跨進(jìn)程的通信機(jī)制,用于上下游傳遞消息。MQ提供“邏輯解耦+物理解耦”的消息通信服務(wù)。使用了MQ之后消息發(fā)送上游只需要依賴MQ,不需要依賴其它服務(wù)。 功能1:流量消峰 功能2:應(yīng)用解耦 功

    2024年02月07日
    瀏覽(118)
  • RabbitMQ入門案例之發(fā)布訂閱模式

    RabbitMQ入門案例之發(fā)布訂閱模式

    本文章主要介紹RabbitMQ的發(fā)布訂閱模式,該模式下,消息為廣播形式,一經(jīng)發(fā)布則會(huì)進(jìn)入交換機(jī)綁定的隊(duì)列中,詳細(xì)介紹可以閱讀官方文檔。 官網(wǎng)文檔地址:https://rabbitmq.com/getstarted.html RabbitMQ中的發(fā)布與訂閱模式是一種消息傳遞的方式,用于在分布式系統(tǒng)中傳遞消息。 在該模

    2024年02月09日
    瀏覽(27)
  • springboot rabbitmq 發(fā)布訂閱 廣播模式

    根據(jù)amqp協(xié)議、rabbitmq入門、springboot集成rabbitmq 可知,rabbitmq的廣播模式關(guān)鍵是使用fanout類型的exchange,fanout exchange會(huì)忽略message中的routing-key、queue中的binding-key,發(fā)給綁定exchange的全部queue。 實(shí)現(xiàn)發(fā)布訂閱(廣播模式)的關(guān)鍵在于對(duì)exchange類型的理解,可參考amqp協(xié)議、rabbitmq入門

    2024年02月02日
    瀏覽(25)
  • RabbitMQ 發(fā)布訂閱模式,routing路由模式,topic模式

    RabbitMQ 發(fā)布訂閱模式,routing路由模式,topic模式

    發(fā)布訂閱模式 一個(gè)消息可以由多個(gè)消費(fèi)者消費(fèi)同一個(gè)消息 ?消費(fèi)者1和2同時(shí)消費(fèi)了該消息 舉例 ?消費(fèi)者1和2同時(shí)消費(fèi)了該消息,比如說消息是發(fā)短信,發(fā)郵件,? 那么1和發(fā)短息? 2可以發(fā)郵件 routing路由模式 就是說哪些讓誰干 哪些讓誰干區(qū)分出來 也可以讓所有消費(fèi)者都消費(fèi) 選擇

    2024年02月02日
    瀏覽(23)
  • 【RabbitMQ四】——RabbitMQ發(fā)布訂閱模式(Publish/Subscribe)

    【RabbitMQ四】——RabbitMQ發(fā)布訂閱模式(Publish/Subscribe)

    通過本篇博客能夠簡(jiǎn)單使用RabbitMQ的發(fā)布訂閱模式。 本篇博客主要是博主通過官網(wǎng)以及學(xué)習(xí)他人的博客總結(jié)出的RabbitMQ發(fā)布訂閱模式。其中如果有誤歡迎大家及時(shí)指正。 發(fā)布訂閱模式的核心是生產(chǎn)者生產(chǎn)的消息,其他消費(fèi)者都可以收到該生產(chǎn)者生產(chǎn)的消息。 由于發(fā)布訂閱模式

    2024年02月02日
    瀏覽(23)
  • RabbitMQ--04--發(fā)布訂閱模式 (fanout)-案例

    RabbitMQ--04--發(fā)布訂閱模式 (fanout)-案例

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 @RabbitListener和@RabbitHandler的使用 OrderService OrderServiceImpl 在項(xiàng)目的test中發(fā)送請(qǐng)求 訪問網(wǎng)址: http://localhost:15672/#/queues yml配置 SmsConsumerService、SmsConsumerServiceImpl EmailConsumerService、EmailConsumerServiceImpl DuanxinCo

    2024年04月14日
    瀏覽(25)
  • RabbitMQ的Publish/Subscribe發(fā)布訂閱模式詳解

    RabbitMQ的Publish/Subscribe發(fā)布訂閱模式詳解

    各位小伙伴很久不見了,今兒又要給大家分享干貨了。我們知道RabbitMQ有簡(jiǎn)單模式、工作隊(duì)列模式、發(fā)布訂閱模式、路由模式、主題模式、遠(yuǎn)程過程調(diào)用模式、發(fā)布者確認(rèn)模式等。這么多模式,你可能一下子很難全部吸收,今天袁老師主要給大家介紹發(fā)布訂閱模式Publish/Subsc

    2024年02月10日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包