[MSMQ]使用MS Message Queue進行發送/接收訊息

  • 28646
  • 0
  • 2014-06-28

摘要:使用MS Message Queue進行發送/接收訊息

今天要來介紹MSMQ

 

 

發送/接送訊息端皆要安裝MSMQ

 

運作方式:發送訊息>本機MSMQ>傳遞>遠端MSMQ>接收訊息

 

 

在 控制台>程式和功能>開啟或關閉Windows功能,選取"Microsoft Message Queue(MSMQ) 伺服器"

 

安裝後,在  控制台>電腦管理>訊息佇列 即可看到有多出"訊息佇列"這個功能

 

 

下面的程式碼為簡單的發送/接收範例

    //自訂訊息內容(要發送/接收的資料格式)
    public class MyData
    {
        public string text;
        public DateTime now;
        public double unm
        {get; set;}
    }

    class Program
    {
        static void Main(string[] args)
        {
            //發送訊息
            SendMessage();

            //接收訊息
            //ReceiveMessage();
        }

        static void SendMessage()
        {
            //string queuePath = @"FormatName:DIRECT=TCP:192.168.1.1\private$\myqueue";// 使用遠程IP指定訊息佇列位置
            string queuePath = @".\private$\myqueue";//使用本機方式指定訊息佇列位置

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

            //要發送的內容
            MyData data = new MyData();
            data.text = "Holle";
            data.now = DateTime.Now;
            data.unm = DateTime.Now.Second;

            //發送訊息
            myQueue.Send(data, "MY 標題");
        }

        static void ReceiveMessage()
        {
            string queuePath = @".\private$\myqueue";//使用本機方式指定訊息佇列位置
            MessageQueue myQueue = new MessageQueue(queuePath);

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

 

 

執行下面程式碼,即能增加一個名為"myqueue"的訊息佇列,
主要用來接受/發送訊息(就像信件郵筒的功能)

MessageQueue.Create(queuePath);//建立用來接受/發送的訊息佇列

 

 

下面程式碼,目的為發送一封"MY 標題"的訊息

MessageQueue myQueue = new MessageQueue(queuePath);

//要發送的內容
MyData data = new MyData();
data.text = "Holle";
data.now = DateTime.Now;
data.unm = DateTime.Now.Second;

//發送訊息
myQueue.Send(data, "MY 標題");

發送後在"myqueue"的訊息佇列,即可收到一封剛剛寄的訊息

 

 

下面的程式碼,目的為接收放在"myqueue"訊息佇列的訊息。

string queuePath = @".\private$\myqueue";//使用本機方式指定訊息佇列位置
MessageQueue myQueue = new MessageQueue(queuePath);

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

接收後,則剛接收完的訊息,就會自動的從"myqueue"訊息佇列中刪除

 

備註:

1.透過遠程IP指定訊息佇列位置,無法使用IP:127.0.0.1,進行指定,
  
及無法使用MessageQueue.Exists、 MessageQueue.Create function(函式)。

string queuePath = @"FormatName:DIRECT=TCP:192.168.1.1\private$\myqueue";// 使用遠程IP指定訊息佇列位置

 

2. MSMQ還有一個功能Triggers (觸發),可用於在接收訊息時,執行特定(指定)的動作(程式),
   
黃偉榮的學習筆記- 點部落 大大點部落,對此方法(MSMQ Triggers)有詳細講解。^_^b

 

詳細內容可參考
MSDN:
http://msdn.microsoft.com/zh-tw/library/19ww660c(v=vs.90).aspx
http://msdn.microsoft.com/zh-tw/library/System.Messaging.MessageQueue(v=vs.110).aspx

 

若有錯誤或不妥地方,還懇請能提出告知一下,感謝你的指教。