中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

巍山| 濮阳县| 安陆市| 平原县| 剑阁县| 西华县| 瑞昌市| 抚顺县| 巴彦淖尔市| 同仁县| 淄博市| 隆德县| 友谊县| 乌恰县| 车险| 日照市| 通山县| 丰台区| 福建省| 久治县| 柞水县| 云梦县| 高淳县| 成安县| 都匀市| 宜春市| 石林| 株洲县| 池州市| 浪卡子县| 信丰县| 武定县| 崇文区| 大田县| 阳春市| 玉龙| 呼伦贝尔市| 仁寿县| 白银市| 交城县| 乌拉特后旗|