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

C#利用RabbitMQ實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)消息傳輸

 更新時(shí)間:2021年05月17日 08:46:22   作者:Alan.hsiang  
RabbitMQ做為消息代理,負(fù)責(zé)接收和轉(zhuǎn)發(fā)消息,可以將RabbitMQ比喻為一個(gè)郵筒、一個(gè)郵局和一個(gè)郵遞員。本文主要以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述RabbitMQ實(shí)現(xiàn)消息傳輸?shù)南嚓P(guān)內(nèi)容,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。

消息隊(duì)列模型

所有 MQ 產(chǎn)品從模型抽象上來說都是一樣的過程:
消費(fèi)者(consumer)訂閱某個(gè)隊(duì)列。生產(chǎn)者(producer)創(chuàng)建消息,然后發(fā)布到隊(duì)列(queue)中,最后將消息發(fā)送到監(jiān)聽的消費(fèi)者。

RabbitMQ設(shè)置

RabbitMQ是通過交換機(jī)將消息轉(zhuǎn)發(fā)到對(duì)應(yīng)隊(duì)列,所以隊(duì)列需要和交換機(jī)進(jìn)行綁定。本例將隊(duì)列綁定到默認(rèn)的amq.direct交換機(jī),并設(shè)置Routing key,如下圖所示:

RabbitMQ動(dòng)態(tài)庫(kù)安裝

通過NuGet包管理器進(jìn)行安裝RabbitMQ.Client,如下所示:

RabbitMQ.Client相關(guān)知識(shí)點(diǎn)

  • ConnectionFactory:構(gòu)造一個(gè)實(shí)例,主要?jiǎng)?chuàng)建連接。
  • IConnection:表示一個(gè)基于AMQP協(xié)議的連接。
  • IModel:表示一個(gè)RabbitMQ通道,可用于聲明一個(gè)隊(duì)列,然后開始消費(fèi)。
  • EventingBasicConsumer:基于獨(dú)立事件監(jiān)聽的基礎(chǔ)消費(fèi)者,可以監(jiān)聽并接收消息。
  • 生產(chǎn)者基本步驟:1. 創(chuàng)建連接 2. 基于連接創(chuàng)建通道 3. 基于通道聲明隊(duì)列,4. 開始生產(chǎn)并發(fā)布消息
  • 消費(fèi)者基本步驟:1. 創(chuàng)建連接 2. 基于連接創(chuàng)建通道 3. 基于通道聲明隊(duì)列,4. 創(chuàng)建消費(fèi)者,5. 綁定通道和消費(fèi)者,并開始消費(fèi)

示例效果圖

本例主要有一個(gè)生產(chǎn)者,一個(gè)消費(fèi)者,通過消息隊(duì)列進(jìn)行消息轉(zhuǎn)發(fā)和接收。

生產(chǎn)者負(fù)責(zé)消息發(fā)送,如下圖所示:

消費(fèi)者負(fù)責(zé)消息接收,如下圖所示:

核心代碼

代碼結(jié)構(gòu):主要包括生產(chǎn)者,消費(fèi)者,公共基礎(chǔ)代碼,如下所示:

RabbitMqHelper主要?jiǎng)?chuàng)建連接,如下所示:

public class RabbitMqHelper
    {

        /// <summary>
        /// 創(chuàng)建連接
        /// </summary>
        /// <returns></returns>
        public IConnection GetConnection()
        {
            try
            {
                var factory = new ConnectionFactory()
                {
                    HostName = "127.0.0.1",
                    Port = 5672,
                    UserName = "guest",
                    Password = "guest",
                    VirtualHost = "/ShortMsgHost"
                };
                var conn = factory.CreateConnection();
                return conn;
            }
            catch (Exception ex) {
                throw ex;
            }
        }



    }

RabbmitMqSendHelper用于發(fā)送消息,如下所示:

public class RabbmitMqSendHelper : RabbitMqHelper
    {
        /// <summary>
        /// 發(fā)送消息
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMsg(string msg)
        {
            try
            {
                using (var conn = GetConnection())
                {
                    using (var channel = conn.CreateModel())
                    {
                        channel.QueueDeclare(queue: "ShortMsgQueue",
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);
                        var body = Encoding.UTF8.GetBytes(msg);

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

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

RabbitMqReceiveHelper主要用于接收信息,如下所示:

public class RabbitMqReceiveHelper : RabbitMqHelper
    {
        public RabbitMqReceiveEventHandler OnReceiveEvent;

        private IConnection conn;

        private IModel channel;

        private EventingBasicConsumer consumer;

        public bool StartReceiveMsg()
        {
            try
            {
                conn = GetConnection();

                channel = conn.CreateModel();

                channel.QueueDeclare(queue: "ShortMsgQueue",
                                durable: true,
                                exclusive: false,
                                autoDelete: false,
                                arguments: null);

                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(message);
                    }
                };
                channel.BasicConsume(queue: "ShortMsgQueue",
                                        autoAck: true,
                                        consumer: consumer);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

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

以上就是C#利用RabbitMQ實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)消息傳輸?shù)膶?shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于c# 用RabbitMQ實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)消息傳輸?shù)馁Y料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#/VB.NET 在PDF中添加文件包(Portfolio)的方法

    C#/VB.NET 在PDF中添加文件包(Portfolio)的方法

    這篇文章主要介紹了C#/VB.NET 在PDF中添加文件包(Portfolio)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-06-06
  • Unity實(shí)現(xiàn)VR中在黑板上寫字效果

    Unity實(shí)現(xiàn)VR中在黑板上寫字效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)VR中在黑板上寫字效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 輕松學(xué)習(xí)C#的String類

    輕松學(xué)習(xí)C#的String類

    輕松學(xué)習(xí)C#的String類,小編也是第一次接觸C#的String類,感興趣的小伙伴們可以參考一下,大家一起學(xué)習(xí)
    2015-11-11
  • C#版ftp方法實(shí)現(xiàn)類的代碼

    C#版ftp方法實(shí)現(xiàn)類的代碼

    C#版ftp方法實(shí)現(xiàn)類的代碼...
    2007-04-04
  • C# 實(shí)現(xiàn)俄羅斯方塊(附源碼)

    C# 實(shí)現(xiàn)俄羅斯方塊(附源碼)

    這篇文章主要介紹了C# 實(shí)現(xiàn)俄羅斯方塊的實(shí)例,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 詳解C#App.config和Web.config加密

    詳解C#App.config和Web.config加密

    本篇文章給大家分享了C#App.config和Web.config加密的相關(guān)知識(shí)點(diǎn)以及具體代碼步驟,有興趣的朋友參考學(xué)習(xí)下。
    2018-05-05
  • C#中XmlTextWriter讀寫xml文件詳細(xì)介紹

    C#中XmlTextWriter讀寫xml文件詳細(xì)介紹

    .NET中包含了很多支持XML的類,這些類使得程序員使用XML編程就如同理解XML文件一樣簡(jiǎn)單。在這篇文章中,我將給出這樣的一個(gè)類的使用示例,這個(gè)類就是XmlTextWriter類
    2013-04-04
  • C#中的委托delegate用法的示例詳解

    C#中的委托delegate用法的示例詳解

    這篇文章主要介紹了C#中的委托用法的示例詳解。本章將由淺入深地講述什么是委托、為什么要使用委托、事件的由來、.NET Framework 中的委托和事件、委托中方法異常和超時(shí)的處理、委托與異步編程、委托和事件對(duì)Observer 設(shè)計(jì)模式的意義。感興趣的可以了解一下
    2020-07-07
  • C#中正則表達(dá)式的3種匹配模式

    C#中正則表達(dá)式的3種匹配模式

    本文主要介紹在C#中正則匹配的三種模式:?jiǎn)涡心J?Singleline)、多行模式(Multiline)與忽略大小寫(IgnoreCase),希望能幫到大家。
    2016-05-05
  • C#檢測(cè)上傳文件真正類型的方法

    C#檢測(cè)上傳文件真正類型的方法

    這篇文章主要介紹了C#檢測(cè)上傳文件真正類型的方法,可有效的防止用戶通過修改后綴名來改變文件類型的功能,需要的朋友可以參考下
    2015-04-04

最新評(píng)論