欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布

 更新時(shí)間:2021年05月17日 09:04:55   作者:Alan.hsiang  
在消息隊(duì)列模型中,如何將消息廣播到所有的消費(fèi)者,這種模式成為“發(fā)布/訂閱”。本文主要以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述通過(guò)fanout交換機(jī),實(shí)現(xiàn)消息的發(fā)布與訂閱,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。

Fanout交換機(jī)模型

扇形交換機(jī),采用廣播模式,根據(jù)綁定的交換機(jī),路由到與之對(duì)應(yīng)的所有隊(duì)列。一個(gè)發(fā)送到交換機(jī)的消息都會(huì)被轉(zhuǎn)發(fā)到與該交換機(jī)綁定的所有隊(duì)列上。很像子網(wǎng)廣播,每臺(tái)子網(wǎng)內(nèi)的主機(jī)都獲得了一份復(fù)制的消息。Fanout交換機(jī)轉(zhuǎn)發(fā)消息是最快的。

RabbitMQ控制臺(tái)操作

新增兩個(gè)隊(duì)列

在同一個(gè)Virtual host下新增兩個(gè)隊(duì)列Q1,Q2,如下圖所示:

綁定fanout交換機(jī)

將兩個(gè)隊(duì)列綁定到系統(tǒng)默認(rèn)的fanout交換機(jī),如下所示:

示例效果圖

生產(chǎn)者,采用Fanout類(lèi)型交換機(jī)發(fā)布消息,如下圖所示:

 當(dāng)生產(chǎn)者發(fā)布 一條消息時(shí),Q1,Q2兩個(gè)隊(duì)列均會(huì)收到,如下圖所示:

當(dāng)啟動(dòng)消費(fèi)者后,兩個(gè)消費(fèi)者,均會(huì)訂閱到相關(guān)消息,如下圖所示:

核心代碼

消息發(fā)布

建立連接后,將通道聲明類(lèi)型為Fanout的交換機(jī),如下所示:

/// <summary>
    /// fanout類(lèi)型交換機(jī),發(fā)送消息
    /// </summary>
    public class RabbitMqFanoutSendHelper : RabbitMqHelper {
        /// <summary>
        /// 發(fā)送消息
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMsg(string msg)
        {
            try
            {
                using (var conn = GetConnection("/Alan.hsiang"))
                {
                    using (var channel = conn.CreateModel())
                    {
                        channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);

                        var body = Encoding.UTF8.GetBytes(msg);

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

                        //Console.WriteLine(" [x] Sent {0}", message);
                    };
                };
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

消息訂閱

建立連接后,通道聲明類(lèi)型為Fanout的交換機(jī),并綁定隊(duì)列進(jìn)行訂閱,如下所示:

/// <summary>
    /// 扇形交換機(jī)接收消息
    /// </summary>
    public class RabbitMqFanoutReceiveHelper : RabbitMqHelper
    {
        public RabbitMqReceiveEventHandler OnReceiveEvent;

        private IConnection conn;

        private IModel channel;

        private EventingBasicConsumer consumer;

        public bool StartReceiveMsg(string queueName)
        {
            try
            {
                conn = GetConnection("/Alan.hsiang");

                channel = conn.CreateModel();
                channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);
                //此處隨機(jī)取出交換機(jī)下的隊(duì)列
                //var queueName = channel.QueueDeclare().QueueName;
                channel.QueueBind(queue: queueName, exchange: "amq.fanout", routingKey: "");
                consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);
                    //Console.WriteLine(" [x] Received {0}", message);
                    if (OnReceiveEvent != null)
                    {
                        OnReceiveEvent(queueName+"::"+message);
                    }
                };
                channel.BasicConsume(queue: queueName,
                                        autoAck: true,
                                        consumer: consumer);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

作者:Alan.hsiang
出處:http://www.cnblogs.com/hsiang/

以上就是C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布的詳細(xì)內(nèi)容,更多關(guān)于C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實(shí)現(xiàn)的文件壓縮和解壓縮類(lèi)

    C#實(shí)現(xiàn)的文件壓縮和解壓縮類(lèi)

    這篇文章主要介紹了C#實(shí)現(xiàn)的文件壓縮和解壓縮類(lèi),實(shí)例分析了C#針對(duì)文件壓縮與解壓縮的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Unity?UGUI的Text文本組件使用示例

    Unity?UGUI的Text文本組件使用示例

    這篇文章主要為大家介紹了Unity?UGUI的Text文本組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#實(shí)現(xiàn)Json文件讀寫(xiě)的方法代碼

    C#實(shí)現(xiàn)Json文件讀寫(xiě)的方法代碼

    這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)Json文件讀寫(xiě)的相關(guān)資料,C# 讀取JSON文件并讀取某一個(gè)關(guān)鍵字的值可以使用Newtonsoft.Json庫(kù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換

    C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換

    這篇文章介紹了C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文方法合集

    C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文方法合集

    這篇文章介紹了C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文的方法合集,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Unity?UGUI的Canvas畫(huà)布組件使用示例詳解

    Unity?UGUI的Canvas畫(huà)布組件使用示例詳解

    這篇文章主要介紹了Unity?UGUI的Canvas畫(huà)布組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#常用目錄文件操作類(lèi)實(shí)例

    C#常用目錄文件操作類(lèi)實(shí)例

    這篇文章主要介紹了C#常用目錄文件操作類(lèi),實(shí)例分析了C#針對(duì)目錄的讀取、檢測(cè)及查找等相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • WinForm之BindingSource基礎(chǔ)操作實(shí)例教程

    WinForm之BindingSource基礎(chǔ)操作實(shí)例教程

    這篇文章主要介紹了WinForm之BindingSource基礎(chǔ)操作,對(duì)BindingSource組建的用法進(jìn)行較為深入的實(shí)例分析,需要的朋友可以參考下
    2014-08-08
  • C#無(wú)損轉(zhuǎn)換Image為Icon的方法

    C#無(wú)損轉(zhuǎn)換Image為Icon的方法

    這篇文章主要為大家詳細(xì)介紹了C#無(wú)損轉(zhuǎn)換Image為Icon的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#多線(xiàn)程系列之任務(wù)基礎(chǔ)(一)

    C#多線(xiàn)程系列之任務(wù)基礎(chǔ)(一)

    本文詳細(xì)講解了C#多線(xiàn)程的任務(wù)基礎(chǔ),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評(píng)論