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

WCF分布式開發(fā)之MSMQ消息隊列

 更新時間:2022年05月09日 10:55:02   作者:springsnow  
這篇文章介紹了WCF分布式開發(fā)之MSMQ消息隊列,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、MSMQ簡介

MSMQ(微軟消息隊列)是Windows操作系統(tǒng)中消息應(yīng)用程序的基礎(chǔ),是用于創(chuàng)建分布式、松散連接的消息通訊應(yīng)用程序的開發(fā)工具。

MSMQ與XML Web Services和.Net Remoting一樣,是一種分布式開發(fā)技術(shù)。但是在使用XML Web Services或.Net Remoting組件時,Client端需要和Server端實時交換信息,Server需要保持聯(lián)機。MSMQ則可以在Server離線的情況下工作,將Message臨時保存在Client端的消息隊列中,以后聯(lián)機時再發(fā)送到Server端處理。

1、MSMQ的實現(xiàn)原理

消息的發(fā)送者把自己想要發(fā)送的信息放入一個容器,然后把它保存到一個系統(tǒng)公用空間的消息隊列中,本地或異地的消息接收程序再從該隊列中取出發(fā)給它的消息進行處理。

消息隊列是一個公用存儲空間,它可以存在于內(nèi)存中或物理文件中,因此,消息以兩種方式發(fā)送,即快遞方式和可恢復模式。MSMQ機制類似QQ消息傳遞機制。下圖演示了MSMQ的實現(xiàn)原理。

2、安裝

默認情況下安裝操作系統(tǒng)是不安裝消息隊列的,你可以在控制面板中找到添加/刪除程序,然后選擇添加/刪除Windows組件一項,然后選擇應(yīng)用程序服務(wù)器,雙擊它進入詳細資料中選擇消息隊列一項進行安裝。

如果服務(wù)沒有自動啟動,需要啟動服務(wù): 
這里寫圖片描述

3、兩個概念

一個是消息Message:Message是通信雙方需要傳遞的消息,它可以是文本、圖片、視頻等。消息包含發(fā)送和接收者的標識,只有指定的用戶才能取得消息。

另一個是隊列Queue:用來保存消息的存儲空間,消息對列分為3類:

  • 公共隊列:MachineName\QueueName 
    能被別的機器所訪問,如果你的多個項目中用到消息隊列,那么你可以把隊列定義為公共隊列
  • 專用隊列:MachineName\Private$\QueueName 
    只針對于本機的程序才可以調(diào)用的隊列,有些情況下為了安全起見定義為私有隊列。
  • 日志隊列:MachineName\QueueName\Journal$

4、MicroSoft.Message.Queue常用的方法:

  • Create方法:創(chuàng)建使用指定路徑的新消息隊列。
  • Delete方法:刪除現(xiàn)有的消息隊列。
  • Existe方法:查看指定消息隊列是否存在。
  • GetPublicQueues方法:在“消息隊列”網(wǎng)絡(luò)中定位消息隊列。
  • Send方法:發(fā)送消息到指定的消息隊列。
  • GetAllMessages()方法:得到隊列中的所有消息。
  • Receive/BeginReceive方法:檢索指定消息隊列中最前面的消息,并將其從該隊列中移除
  • Peek/BeginPeek方法:查看某個特定隊列中的消息隊列,但不從該隊列中移出消息。。
  • Purge方法:清空指定隊列的消息。

二、服務(wù)端

首先,實現(xiàn)服務(wù)器端。創(chuàng)建一個控制臺項目,添加System.Messaging引用,因為消息隊列的類全部封裝在System.Messaging.dll程序集里。

服務(wù)器端代碼需要注意的是,公共隊列只能在域環(huán)境中創(chuàng)建,如果個人電腦沒有加入域環(huán)境,則不能創(chuàng)建公共隊列。

    if (!MessageQueue.Exists(@".\MYFIRSTMSMQ"))
    {
        using (MessageQueue mq = MessageQueue.Create(@".\MYFIRSTMSMQ"))//創(chuàng)建一個公共消息隊列
        {
            mq.Label = "myFirstMSMQ";
            Console.WriteLine("已經(jīng)創(chuàng)建了一個公共隊列{0}", mq.Label);
            Console.WriteLine("公共隊列{0}的路徑為{1}", mq.Label, mq.Path);
            mq.Send("MSMQ 消息", "今天又學到個有趣的知識");
        }
    }
    foreach (MessageQueue mq in MessageQueue.GetPublicQueues())//獲取所有公共隊列,發(fā)送消息
    {
        mq.Send("發(fā)送公共消息隊列" + DateTime.Now.ToLongTimeString(), "今天又學到個有趣的知識");
        Console.WriteLine("公有消息已經(jīng)送到{0}", mq.Path);
    }

    if (!MessageQueue.Exists(@".\Private$\MYFIRSTMSMQ"))
    {
        using (MessageQueue mq = MessageQueue.Create(@".\Private$\MYFIRSTMSMQ"))//創(chuàng)建一個私有消息隊列
        {
            mq.Label = "myFirstPrivateMSMQ";
            Console.WriteLine("已經(jīng)創(chuàng)建了一個私有隊列{0}", mq.Label);
            Console.WriteLine("私有隊列{0}的路徑為{1}", mq.Label, mq.Path);
            mq.Send("MSMQ 私有隊列消息" + "今天又學到個有趣的知識");
        }
    }

    if (MessageQueue.Exists(@".\Private$\MYFIRSTMSMQ"))
    {
        MessageQueue mq = new MessageQueue(@".\Private$\MYFIRSTMSMQ");//找到私有隊列,發(fā)送消息

        mq.Send("發(fā)送私有消息隊列" + DateTime.Now.ToLongTimeString() + "今天又學到個有趣的知識");
        Console.WriteLine("私有消息已經(jīng)送到{0}", mq.Path);
    }

三、客戶端

服務(wù)器端把消息發(fā)送到共享的消息隊列中,然后,客戶端從這個共享的消息隊列中取出消息進行處理。

if (MessageQueue.Exists(@".\MYFIRSTMSMQ"))// 獲取公共消息隊列
{
    using (MessageQueue mq = new MessageQueue(@".\MYFIRSTMSMQ"))//創(chuàng)建消息隊列對象
    {
        mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });//設(shè)置消息隊列的格式化器,還有BinaryMessageFormatter,ActiveXMessageFormatter等
        foreach (Message msg in mq.GetAllMessages())
        {
            Console.WriteLine("接收到的消息是:{0}", msg.Body);
        }
        Message firstmsg = mq.Receive();
        Console.WriteLine("收到的第一條消息為:{0}", firstmsg.Body);
    }
}

if (MessageQueue.Exists(@".\Private$\MYFIRSTMSMQ"))// 獲取私有消息隊列
{
    using (MessageQueue mq = new MessageQueue(@".\Private$\MYFIRSTMSMQ"))
    {
        //....
    }
}

到此這篇關(guān)于WCF分布式開發(fā)之MSMQ消息隊列的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#讀寫共享文件夾的方法

    C#讀寫共享文件夾的方法

    這篇文章主要為大家詳細介紹了C#讀寫共享文件夾的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 一道關(guān)于C#參數(shù)傳遞的面試題分析

    一道關(guān)于C#參數(shù)傳遞的面試題分析

    這篇文章主要介紹了一道關(guān)于C#參數(shù)傳遞的面試題,實例分析了C#參數(shù)傳遞的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • unity3d調(diào)用手機或電腦攝像頭

    unity3d調(diào)用手機或電腦攝像頭

    這個是在網(wǎng)上看到的,經(jīng)測試可以在電腦上運行,確實調(diào)用了本地攝像頭。有需要的小伙伴可以參考下。
    2015-03-03
  • C#拼接SQL語句 用ROW_NUMBER實現(xiàn)的高效分頁排序

    C#拼接SQL語句 用ROW_NUMBER實現(xiàn)的高效分頁排序

    C#拼接SQL語句,SQL Server 2005+,多行多列大數(shù)據(jù)量情況下,使用ROW_NUMBER實現(xiàn)的高效分頁排序
    2012-05-05
  • 一步步教你如何創(chuàng)建第一個C#項目

    一步步教你如何創(chuàng)建第一個C#項目

    這篇文章主要給大家介紹了關(guān)于如何創(chuàng)建第一個C#項目的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-12-12
  • 使用C#實現(xiàn)在word中插入頁眉頁腳的方法

    使用C#實現(xiàn)在word中插入頁眉頁腳的方法

    這篇文章主要介紹了使用C#實現(xiàn)在word中插入頁眉頁腳的方法,是操作Word的常見方法,有一定的學習借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C#如何給新建的winform程序添加資源文件夾Resources

    C#如何給新建的winform程序添加資源文件夾Resources

    這篇文章主要介紹了C#如何給新建的winform程序添加資源文件夾Resources,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C#如何自定義multipart/form-data的解析器

    C#如何自定義multipart/form-data的解析器

    這篇文章主要介紹了C#如何自定義multipart/form-data的解析器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Chrome Visual Studio 2005下的編譯過程

    Chrome Visual Studio 2005下的編譯過程

    研究Chrome ,首先得把它編譯出來,這對于后續(xù)的代碼分析和閱讀有很大的幫助,想想自己編譯出一個 Chrome 瀏覽器來使用,那是一件很炫的事情。
    2009-07-07
  • C#中的委托和事件

    C#中的委托和事件

    這篇文章介紹了C#中的委托和事件,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

高邮市| 新和县| 商南县| 临安市| 泾阳县| 尉犁县| 尖扎县| 新巴尔虎左旗| 芷江| 东辽县| 阳高县| 延安市| 杨浦区| 广东省| 即墨市| 信宜市| 垣曲县| 来凤县| 洛隆县| 老河口市| 应城市| 盈江县| 澜沧| 樟树市| 新津县| 萍乡市| 淳安县| 贵溪市| 涪陵区| 夏津县| 定兴县| 盐边县| 阿鲁科尔沁旗| 鹤庆县| 共和县| 康平县| 南阳市| 阳曲县| 文山县| 泸水县| 宁阳县|