91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

佛学| 禹城市| 九江县| 吴堡县| 酉阳| 宜宾市| 小金县| 武城县| 西峡县| 友谊县| 高阳县| 慈利县| 政和县| 张北县| 宁津县| 南华县| 容城县| 桑植县| 康定县| 肇源县| 威海市| 阳城县| 河津市| 灌云县| 抚顺市| 突泉县| 鄂托克前旗| 桓仁| 泽州县| 客服| 永福县| 弥勒县| 灵宝市| 舒城县| 巴里| 壶关县| 横山县| 洞口县| 滕州市| 高清| 修水县|