摘要:使用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
若有錯誤或不妥地方,還懇請能提出告知一下,感謝你的指教。