网站静态页模板,深圳知名工业设计公司,免费推广方法有哪些,湖南常德通报1例复阳病例MSMQ 是 Windows 自带的消息队列#xff0c;它提供了在多机器#xff0c;多系统之间实现可靠的消息互联#xff0c;MSMQ 支持可扩展#xff0c;线程安全#xff0c;使用简单等强势特性。MSDN 上说#xff1a;消息队列技术使不同时刻运行的程序可以在异构网络或者异构系统… MSMQ 是 Windows 自带的消息队列它提供了在多机器多系统之间实现可靠的消息互联MSMQ 支持可扩展线程安全使用简单等强势特性。MSDN 上说消息队列技术使不同时刻运行的程序可以在异构网络或者异构系统中进行交互即使对方不在线也没有关系应用程序仅关心如何从队列中读取或写入消息。通常和 MSMQ 交互的应用程序有两种角色发布者 和 消费者发布者应用程序将消息发送后不要求消费者应用程序保持备战状态实际上这个消息是被送到 操作系统维护的 消息队列 中供后续某个时刻需要此消息的 接收者应用程序 消费。创建队列 可以在 Windows 控制面板上通过 Turn Windows features on or off 选项进行 MSMQ 的安装一旦 MSMQ 安装好之后接下来就可以创建队列了你可以在 Computer Management 上的 Message Queuing 节点上可视化创建也可以通过编程的方式创建本篇就来讨论后面这种方式。编程创建 MSMQ 先引用 System.Messaging 命名空间然后使用 MessageQueue.Create 创建消息队列下面的代码展示了如何实现。
MessageQueue.Create(.\Private$\IDG);队列创建好之后接下来就可以向其发送 message 了如下代码所示
MessageQueue.Create(.\Private$\IDG); messageQueue new MessageQueue(.\Private$\IDG);messageQueue.Label This is a test queue.;messageQueue.Send(This is a test message., IDG);有一点要注意在发送消息之前你需要检查队列是否存在如果不存在你必须要先创建一个如果存在则不必再创建下面的代码展示了如何去实现。static void Main(string[] args){MessageQueue messageQueue null;string description This is a test queue.;string message This is a test message.;string path .\Private$\IDG;try{if (MessageQueue.Exists(path)){messageQueue new MessageQueue(path);messageQueue.Label description;}else{MessageQueue.Create(path);messageQueue new MessageQueue(path);messageQueue.Label description;}messageQueue.Send(message);}catch{throw;}finally{messageQueue.Dispose();}}上面是消息的发送接下来再看一下如何从 消息队列 中获取消息代码如下private static Liststring ReadQueue(string path){Liststring lstMessages new Liststring();using (MessageQueue messageQueue new MessageQueue(path)){System.Messaging.Message[] messages messageQueue.GetAllMessages();foreach (System.Messaging.Message message in messages){message.Formatter new XmlMessageFormatter(new String[] { System.String, mscorlib });string msg message.Body.ToString();lstMessages.Add(msg);}}return lstMessages;}上面的案例演示的是向消息队列中塞入 string 类型其实还可以塞入 model 为了简单起见我定义了一个只有两个属性的 LogMessage 类如下代码所示public class LogMessage{public string MessageText { get; set; }public DateTime MessageTime { get; set; }}下面的代码展示了如何将 logMessage 实例送入到 消息队列 中。private static void SendMessage(string queueName, LogMessage msg){MessageQueue messageQueue null;if (!MessageQueue.Exists(queueName)) messageQueue MessageQueue.Create(queueName);else messageQueue new MessageQueue(queueName);try{messageQueue.Formatter new XmlMessageFormatter(new Type[] { typeof(LogMessage) });messageQueue.Send(msg);}catch{//Write code here to do the necessary error handling.}finally{messageQueue.Close();}}接下来看看 SendMessage 方法是如何对 LogMessage 进行填充数据的如下代码所示LogMessage msg new LogMessage(){MessageText This is a test message.,MessageTime DateTime.Now};SendMessage(.\Private$\IDGLog, msg);然后再看看看如何从 消息队列 中读取 LogMessage 。private static LogMessage ReceiveMessage(string queueName){if (!MessageQueue.Exists(queueName)) return null;MessageQueue messageQueue new MessageQueue(queueName);LogMessage logMessage null;try{messageQueue.Formatter new XmlMessageFormatter(new Type[] { typeof(LogMessage) });logMessage (LogMessage)messageQueue.Receive().Body;}catch { }finally{messageQueue.Close();}return logMessage;}译文链接https://www.infoworld.com/article/3060115/how-to-work-with-msmq-in-c.html