2017年4月1日 星期六

[C#] .NET MSQueue 安裝及使用 (功能實作)

安裝MSQueue:
控制台→程式集→開啟或關閉Windows功能


Microsoft Message Queue(MSMQ)勾選→確認

安裝完後可以在
電腦管理→服務與應用程式 看到(訊息佇列),這樣就完成安裝了。


實作:
實作會新增以下檔案:
  • MailQueue.cs//實作MSMQ
  • MailQueueTemplate.cs//MSMQ先關設定
  • Variable.cs//取得Web.config appSettings 封裝

呼叫使用方法
   
            //推送資料
            MailQueue MailQueue = new MailQueue();
            MailQueue.SendMessage("Test");
       
            //取得資料
            MailQueue MailQueue = new MailQueue();
            var data = MailQueue.ReceiveMessage();

若資料送出成功可以到訊息佇列查詢該筆資料是否存在,用範例來看可以在佇列倒到"Test"這筆資料。

實作MSMQ功能:
新增Variable.cs
   
        public static string GetAppSetting(string Key)
        {
            string AppSetting = string.Empty;
            AppSetting = System.Configuration.ConfigurationManager.AppSettings[Key];

            return AppSetting;
        }

新增MailQueueTemplate.cs
   
public class MailQueueTemplate
    {
        /// <summary>
        /// 指定訊息佇列位置
        /// </summary>
        public static string QueuePath
        {
            /// 規則是:服務器名\佇列名稱  
            //  Private私有:電腦名稱\ PRIVATE $ \ 佇列名稱
            //  public 公用:電腦名稱\ 佇列名稱
            //  Journal日誌:電腦名稱\ 佇列名稱 \ $日誌
            get { return Variable.GetAppSetting("QueuePath"); }
        }



        /// <summary>
        /// EmailQueueEnable
        /// </summary>
        public static string EmailQueueEnable
        {
            //true 啟用
            //false 停用
            get { return Variable.GetAppSetting("EmailQueueEnable"); }
        }
    }

web.configr加入
   
  <appSettings>   
    <!--EmailQueueEnable-->
    <add key="EmailQueueEnable" value="false" />

    <!--QueuePath-->
    <add key="QueuePath" value=".\private$\myqueue" />
  </appSettings>

新增MailQueue.cs 功能實作
 
    public class MailQueue
    {
        /// <summary>
        /// 派送 MessageQueue
        /// </summary>
        public void SendMessage(object myData)
        {
            //string queuePath = @"FormatName:DIRECT=TCP:192.168.1.1\private$\myqueue";// 使用遠程IP指定訊息佇列位置
            //string queuePath = @".\private$\myqueue";//使用本機方式指定訊息佇列位置
            string queuePath =  MailQueueTemplate.QueuePath;

            if (!MessageQueue.Exists(queuePath))//判斷 myqueue訊息佇列是否存在
            {
                MessageQueue.Create(queuePath);//建立用來接受/發送的訊息佇列
            }
            MessageQueue myQueue = new MessageQueue(queuePath);

            //發送訊息
            myQueue.Send(myData, "SendQueue");
        }

        /// <summary>
        /// 接收 MessageQueue
        /// </summary>
        public string ReceiveMessage()
        {
            try
            {
                //string queuePath = @".\private$\myqueue";//使用本機方式指定訊息佇列位置
                string queuePath = MailQueueTemplate.QueuePath;
                MessageQueue myQueue = new MessageQueue(queuePath);

                myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });//設定接收訊息內容的型別
                System.Messaging.Message message = myQueue.Receive();//接收訊息佇列內的訊息
                string data = (string)message.Body;//將訊息內容轉成正確型別
                return data;
            }
            catch(Exception ex)
            {
             throw;
            }
        }


    }


沒有留言:

張貼留言