最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Fanout交換機(jī)模型

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

RabbitMQ控制臺操作

新增兩個隊列

在同一個Virtual host下新增兩個隊列Q1,Q2,如下圖所示:

綁定fanout交換機(jī)

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

示例效果圖

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

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

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

核心代碼

消息發(fā)布

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

/// <summary>
    /// fanout類型交換機(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;
            }
        }
    }

消息訂閱

建立連接后,通道聲明類型為Fanout的交換機(jī),并綁定隊列進(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ī)下的隊列
                //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實現(xiàn)消息訂閱與發(fā)布的詳細(xì)內(nèi)容,更多關(guān)于C#用RabbitMQ實現(xiàn)消息訂閱與發(fā)布的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#連接mysql數(shù)據(jù)庫完整實例

    C#連接mysql數(shù)據(jù)庫完整實例

    這篇文章主要介紹了C#連接mysql數(shù)據(jù)庫的方法,以一個完整實例形式分析了C#操作mysql數(shù)據(jù)庫連接的基本技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • C#序列化成XML注意細(xì)節(jié)

    C#序列化成XML注意細(xì)節(jié)

    最常用的序列化是把某個類序列化成二進(jìn)制文件.但有時我們也會把類序列化成xml文件,需要的朋友可以參考下
    2012-11-11
  • unity實現(xiàn)玻璃效果

    unity實現(xiàn)玻璃效果

    這篇文章主要為大家詳細(xì)介紹了unity實現(xiàn)玻璃效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#獲取每個年,月,周的起始日期和結(jié)束日期的方法

    C#獲取每個年,月,周的起始日期和結(jié)束日期的方法

    這篇文章主要介紹了C#獲取每個年,月,周的起始日期和結(jié)束日期的方法,涉及C#時間與日期基本操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 10分鐘學(xué)會VS NuGet包私有化部署

    10分鐘學(xué)會VS NuGet包私有化部署

    本文主要介紹了10分鐘學(xué)會VS NuGet包私有化部署,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中遍歷DataSet數(shù)據(jù)集對象實例

    C#中遍歷DataSet數(shù)據(jù)集對象實例

    這篇文章主要介紹了C#中遍歷DataSet數(shù)據(jù)集對象實例,經(jīng)常忘記如何操作DataSet,這里記下來并分享,讓需要的朋友可以參考下
    2014-08-08
  • C# 動態(tài)調(diào)用WebService的示例

    C# 動態(tài)調(diào)用WebService的示例

    這篇文章主要介紹了C# 動態(tài)調(diào)用WebService的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C# SaveFileDialog與OpenFileDialog用法案例詳解

    C# SaveFileDialog與OpenFileDialog用法案例詳解

    這篇文章主要介紹了C# SaveFileDialog與OpenFileDialog用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • c#基礎(chǔ)——了解程序結(jié)構(gòu)

    c#基礎(chǔ)——了解程序結(jié)構(gòu)

    這篇文章主要介紹了c# 程序結(jié)構(gòu)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)C#,感興趣的朋友可以了解下
    2020-07-07
  • C#?線程切換后上下文都去了哪里(.NET高級調(diào)試分析)

    C#?線程切換后上下文都去了哪里(.NET高級調(diào)試分析)

    總會有一些朋友問一個問題,在 Windows 中線程做了上下文切換,請問被切的線程他的寄存器上下文都去了哪里?這個問題其實比較底層,如果對操作系統(tǒng)沒有個體系層面的理解以及做過源碼分析,其實很難說明白,這篇我們就從.NET高級調(diào)試的角度分析,需要的朋友可以參考下
    2023-12-12

最新評論

涡阳县| 宁乡县| 靖州| 镇安县| 新野县| 绥棱县| 莒南县| 沧源| 鹤峰县| 霍城县| 瓦房店市| 凤冈县| 永登县| 福贡县| 大关县| 鄂托克旗| 霍山县| 固安县| 基隆市| 成安县| 赣榆县| 兴隆县| 勐海县| 新兴县| 于都县| 延庆县| 金川县| 奉化市| 郎溪县| 军事| 北辰区| 遂溪县| 丽水市| 清水县| 靖边县| 德兴市| 巨鹿县| 蒙山县| 新乐市| 西乡县| 岳西县|