亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何用RabbitMQ實現消息訂閱與發布

發布時間:2021-05-17 11:23:56 來源:億速云 閱讀:492 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關C#如何用RabbitMQ實現消息訂閱與發布的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Fanout交換機模型

扇形交換機,采用廣播模式,根據綁定的交換機,路由到與之對應的所有隊列。一個發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上。很像子網廣播,每臺子網內的主機都獲得了一份復制的消息。Fanout交換機轉發消息是最快的。

C#如何用RabbitMQ實現消息訂閱與發布

RabbitMQ控制臺操作

新增兩個隊列

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

C#如何用RabbitMQ實現消息訂閱與發布

綁定fanout交換機

將兩個隊列綁定到系統默認的fanout交換機,如下所示:

C#如何用RabbitMQ實現消息訂閱與發布

示例效果圖

生產者,采用Fanout類型交換機發布消息,如下圖所示:

C#如何用RabbitMQ實現消息訂閱與發布

 當生產者發布 一條消息時,Q1,Q2兩個隊列均會收到,如下圖所示:

C#如何用RabbitMQ實現消息訂閱與發布

當啟動消費者后,兩個消費者,均會訂閱到相關消息,如下圖所示:

C#如何用RabbitMQ實現消息訂閱與發布

核心代碼

消息發布

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

/// <summary>
    /// fanout類型交換機,發送消息
    /// </summary>
    public class RabbitMqFanoutSendHelper : RabbitMqHelper {
        /// <summary>
        /// 發送消息
        /// </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的交換機,并綁定隊列進行訂閱,如下所示:

/// <summary>
    /// 扇形交換機接收消息
    /// </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);
                //此處隨機取出交換機下的隊列
                //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;
            }
        }
    }

C#是什么

C#是一個簡單、通用、面向對象的編程語言,它由微軟Microsoft開發,繼承了C和C++強大功能,并且去掉了一些它們的復雜特性,C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程從而成為.NET開發的首選語言,但它不適用于編寫時間急迫或性能非常高的代碼,因為C#缺乏性能極高的應用程序所需要的關鍵功能。

感謝各位的閱讀!關于“C#如何用RabbitMQ實現消息訂閱與發布”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田东县| 正阳县| 海伦市| 夏邑县| 若羌县| 靖西县| 平邑县| 唐海县| 尖扎县| 揭西县| 逊克县| 冕宁县| 平泉县| 岑溪市| 静乐县| 兴安县| 荃湾区| 南汇区| 汨罗市| 台中市| 汾阳市| 嘉荫县| 会昌县| 大竹县| 凤冈县| 库尔勒市| 北京市| 淳安县| 陈巴尔虎旗| 盘锦市| 天长市| 汾西县| 静宁县| 宁都县| 密云县| 察雅县| 安溪县| 米泉市| 象山县| 郴州市| 宜川县|