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

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)庫安裝

通過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#中Md5和Sha1兩種加密方式

    淺談C#中Md5和Sha1兩種加密方式

    這篇文章主要介紹了淺談C#中Md5和Sha1兩種加密方式的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • C#?wpf實(shí)現(xiàn)任意控件更多調(diào)整大小功能

    C#?wpf實(shí)現(xiàn)任意控件更多調(diào)整大小功能

    這篇文章主要為大家詳細(xì)介紹了C#?wpf實(shí)現(xiàn)任意控件更多調(diào)整大小功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C# 根據(jù)表格偶數(shù)、奇數(shù)加載不同顏色

    C# 根據(jù)表格偶數(shù)、奇數(shù)加載不同顏色

    這篇文章主要介紹了C# 根據(jù)表格偶數(shù)、奇數(shù)加載不同顏色,需要的朋友可以參考下
    2017-09-09
  • C#多線程基本使用小結(jié)

    C#多線程基本使用小結(jié)

    C#多線程編程涉及Thread、Task、異步和Parallel等工具,Thread類用于創(chuàng)建獨(dú)立線程,通過Priority屬性設(shè)置優(yōu)先級(jí),而線程池管理線程的調(diào)度和重用,本文給大家介紹C#多線程基本使用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 基于C#實(shí)現(xiàn)高效示波器功能

    基于C#實(shí)現(xiàn)高效示波器功能

    這篇文章介紹了用?C#實(shí)現(xiàn)示波器功能的方法,包括使用?WinForm?及多種曲線控件,闡述了原理和思路,如定義緩存數(shù)據(jù)的隊(duì)列、轉(zhuǎn)化數(shù)組刷新顯示等,還提到注意事項(xiàng)及擴(kuò)展特性,最后呼吁點(diǎn)贊支持和交流,需要的朋友可以參考下
    2024-12-12
  • DataGridView帶圖標(biāo)的單元格實(shí)現(xiàn)代碼

    DataGridView帶圖標(biāo)的單元格實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了DataGridView帶圖標(biāo)的單元格的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#自定義IP輸入框控件

    C#自定義IP輸入框控件

    這篇文章主要為大家詳細(xì)介紹了C#自定義IP輸入框控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#條碼生成及打印實(shí)例代碼

    C#條碼生成及打印實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了C#條碼生成及打印實(shí)例代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • C#如何通過probing指定dll尋找文件夾詳解

    C#如何通過probing指定dll尋找文件夾詳解

    這篇文章主要給大家介紹了關(guān)于C#如何通過probing指定dll尋找文件夾的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C#心跳機(jī)制服務(wù)器的示例代碼

    C#心跳機(jī)制服務(wù)器的示例代碼

    心跳機(jī)制出現(xiàn)在tcp長連接中,客戶端和服務(wù)器之見定時(shí)發(fā)送一種特殊的數(shù)據(jù)包,本文主要介紹了C#心跳機(jī)制服務(wù)器的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論

乐亭县| 定日县| 乐至县| 镇安县| 宁安市| 山东省| 子洲县| 苍南县| 玉溪市| 吉首市| 股票| 曲松县| 博罗县| 勐海县| 长葛市| 辽宁省| 潼南县| 阿城市| 麻江县| 东阳市| 石屏县| 自贡市| 鄂托克前旗| 诸暨市| 区。| 龙岩市| 恭城| 福州市| 青川县| 乌鲁木齐县| 湖北省| 德令哈市| 宝鸡市| 柳江县| 微山县| 英德市| 云霄县| 普格县| 九寨沟县| 贵南县| 廊坊市|