志在指尖
用双手敲打未来

C#MSMQ入门一

MSMQ全称MicroSoftMessageQueue,微软音讯行列,是在多个不同的应用之间实现彼此通讯的一种异步传输形式,彼此通讯的应用可以散布于同一台机器上,也可以散布于相连的网络空间中的任一位置。它的实现原理是:音讯的发送者把自己想要发送的信息放入一个容器中(咱们称之为Message),然后把它保存至一个体系公用空间的音讯行列(MessageQueue)中,本地或许异地的音讯接纳程序再从该行列中取出发给它的音讯进行处理。
音讯Message是由通讯的两边所需求传递的信息。音讯是MSMQ的存储对象,封装为System.Messaging.Message对象,它由一个主体(body)和若干特点构成,其中咱们的用户数据通常被序列化装入body主体中,这也是咱们称它为数据容器的原因。除了body特点,还有几个特点相对来说比较重要:Priority(音讯的优先级),Label(用户界说的音讯标识),Formatter(音讯的序列组件,当用户将复杂类型数据填充到body中,用户的数据会先被序列化)。
行列分事务性行列和非事务性行列,默许创建的对错事务性行列。当咱们勾选事务性复选框,就会创建事务性行列。那么什么是事务性行列呢?事务性行列将音讯保存在磁盘上,实现了持久化,也就是说当关机断电后,下次再发动机器,咱们的音讯仍然保存在行列里边,而非事务性行列则将音讯保存在内存中,也就是说重启电脑后,行列里边的音讯将不存在了。c#
行列的类型主要包括以下几种:
“公共行列”在整个“音讯行列”网络中仿制,并且有可能由网络连接的一切站点访问。
“专用行列”不在整个网络中发布,相反,它们仅在所驻留的本地计算机上可用。专用行列只能由知道行列的完整途径名或标签的应用程序访问。
“管理行列”包括承认在给定“音讯行列”网络中发送的音讯回执的音讯。指定期望MessageQueue组件运用的管理行列(如果有的话)。
“呼应行列”包括目标应用程序接纳到音讯时回来给发送应用程序的呼应音讯。指定期望MessageQueue组件运用的呼应行列(如果有的话)。
优点:稳定、音讯优先级、脱机才能以及安全性,有保障的音讯传递和执行许多事务处理的牢靠的防故障机制。
缺点:MSMQ不适合于Client需求Server端实时交互情况;大量恳求的时候呼应推迟。
二、装置
在运转中输入appwiz.cpl->翻开或关闭Windows功能->MicrosoftMessageQueue(MSMQ)服务器。
装置成功后,在运转中输入compmgmt.msc->服务和应用程序->音讯行列。
右键音讯行列->特点,可更改默许存储途径等。
三、示例演示
留意:需引证System.Messaging。
classProgram
{staticvoidMain(string[]args)
{#regionMSMQ入门一//创建音讯行列,默许存储途径:C:\Windows\System32\msmq\storageif(MessageQueue.Exists(@”.\Private$\HelloMSMQ”))
MessageQueue.Delete(@”.\Private$\HelloMSMQ”);//删去音讯行列HelloMSMQif(MessageQueue.Exists(@”.\Private$\WorldMSMQ”))
MessageQueue.Delete(@”.\Private$\WorldMSMQ”);//删去音讯行列WorldMSMQMessageQueuemqHello=MessageQueue.Create(@”.\Private$\HelloMSMQ”);
MessageQueuemqWorld=MessageQueue.Create(@”.\Private$\WorldMSMQ”);//发送音讯mqHello.Send(“HiWorld,IamHello.”,”mqHello1″);
mqHello.Send(“Areyoufree?”,”mqHello2″);
mqWorld.Send(“HiHello,IamWorld.”,”mqWorld1″);
mqWorld.Send(“IguessI’llbefree.”,”mqWorld2″);//回来本机一切私有行列的音讯foreach(MessageQueueiteminMessageQueue.GetPrivateQueuesByMachine(“cx168”))
{
item.Formatter=newXmlMessageFormatter(newstring[]{“System.String”});
Message[]messages=item.GetAllMessages();foreach(Messagemessageinmessages)
{
Console.WriteLine($”Label:{message.Label}Body:{message.Body}”);
}
}//回来指定行列的音讯if(MessageQueue.Exists(@”.\Private$\HelloMSMQ”))
{using(MessageQueuetheOne=newMessageQueue(@”.\Private$\HelloMSMQ”))
{
Console.WriteLine();//设置音讯行列格式化器theOne.Formatter=newXmlMessageFormatter(newstring[]{“System.String”});//承受但不删去音讯Messagemsg=mqHello.Peek();
Console.WriteLine($”Label:{msg.Label}Body:{msg.Body}”);//承受并删去音讯msg=mqHello.Receive();
Console.WriteLine($”Label:{msg.Label}Body:{msg.Body}”);
msg=mqHello.Peek();
Console.WriteLine($”Label:{msg.Label}Body:{msg.Body}”);//删去一切音讯mqHello.Purge();
Console.WriteLine($”mqHellocount:{mqHello.GetAllMessages().Count()}”);
}
}
Console.Read();#endregion}
}

未经允许不得转载:IT技术网站 » C#MSMQ入门一
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载