MSMQ: microsoft message queue
特点:微软官方推出的消息队列框架,可直接通过操作系统安装(Windows Server/Windows7),无需下载第三方库,并且免费。
具体直接安装就行。
表示微软消息队列服务。MSMQ 可以工作在在线或者离线场景,并提供异步编程功能。如果客户端离线,MSMQ将会是最合适的方法,这是因为服务端 不需要等待客户端读取数据并向服务端返回确认。
1)安装
以上为 windows 7 消息队列安装方式:
windows server 2008 R2 消息队列安装方式:(这里是服务器安装) 本地安装可以去查一下具体教程。
在服务器管理器中,单击“功能”。
在“功能摘要”下的右窗格中,单击“添加功能”。
在生成的窗口中,展开“消息队列”。
展开“消息队列服务”。
单击“目录服务集成”(用于加入域的计算机),然后单击“HTTP 支持”。
单击“下一步”,然后单击“安装”。
安装即可。
2)确认MSSQ安装成功
通过在服务中,然后找到Message Queuing. 如果没有就说明MSMQ 没有安装。
3)MSMQ 支持两种类型的消息: XML 和二进制。
命名空间关系:
System
Messaging
Message
MessageQueue
MessageEnumerator
MessageType
MessagePriority
XML方式:
static void Main(string[] args)
{
MessageQueue messageQueue = null;
if (MessageQueue.Exists(@".\Private$\MyQueues"))
{
messageQueue = new MessageQueue(@".\Private$\MyQueues");
messageQueue.Label = "Testing Queue";
}
else
{
messageQueue = MessageQueue.Create(@".\Private$\MyQueues");
messageQueue.Label = "Newly Created Queue";
}
messageQueue.Send("First ever Message is sent to MSMQ", "Title");
messageQueue.Formatter = new XmlMessageFormatter(new string[] { "System.String" });
//iterating the queue contents
foreach (Message msg in messageQueue)
{
string readMessage = msg.Body.ToString();
Console.WriteLine(readMessage);
//process message
}
//after all processing delete the messages
messageQueue.Purge();
Console.ReadKey();
}
二进制方式:
class Program
{
static void Main(string[] args)
{
CreateQueue(@".\Private$\ImageQueue");
SendMessage();
ReceiveMessage();
Console.ReadKey();
}
public static void CreateQueue(string queuePath)
{
try
{
if (!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
catch(MessageQueueException e)
{
Console.WriteLine(e.Message);
}
}
//Send an image to a queue, using the BinaryMessageFormatter.
public static void SendMessage()
{
try
{
//Create new bitmap.
//File must be in \bin\debug or \bin\release folder
//Or a full path to its location should be given
MessageQueue myQueue = new MessageQueue(@".\Private$\ImageQueue");
Image myImage = Bitmap.FromFile("MyImage.jpg");
Message msg = new Message(myImage, new BinaryMessageFormatter());
myQueue.Send(msg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
//Receive a message that contains an image.
public static void ReceiveMessage()
{
try
{
MessageQueue myQueue = new MessageQueue(@".\Private$\ImageQueue");
myQueue.Formatter = new BinaryMessageFormatter();
Message myMessage = myQueue.Receive();
Bitmap myImage = (Bitmap)myMessage.Body;
myImage.Save("NewImage.jpg", ImageFormat.Jpeg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
在这个例子中我们将一个JPG图片文件存储到MSMQ队列,它可以在接下来的步骤中被接收然后使用。
运行这个程序并确认是否"NewImage.Jpg" 文件在Debug或者Release 文件夹中被创建。