c#实现消息机制

c#实现消息机制

ID:31126710

大小:78.50 KB

页数:6页

时间:2019-01-06

c#实现消息机制_第1页
c#实现消息机制_第2页
c#实现消息机制_第3页
c#实现消息机制_第4页
c#实现消息机制_第5页
资源描述:

《c#实现消息机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、顾名思义,微软消息队列(MSMQ)是一种给队列发送消息以便稍后进行处理的方法。消息由一个“Producer”(牛产者)应用程序发送出去,再由一个“Consumer”(消费者)应用程序返回。这两个应用程序可以在同一台机器上,在整个网络中,或甚至是位于并不总是连接在一起的不同机器上。MSMQ具有故障保险特性,因为如果第-•次传送失败,它会重新发送消息。这样可保证你的应用程序消息到达它们的目的地。我将应用一个叫做“TechRopublic”的队列。当你运行木文下载版本中的样本实例吋,如果这个队列不存在

2、,它会H动建立。在前面的一篇文章中,ZachSmith说明了如何使用TPC通道在同一台机器上的两个进程间通信。他将在本文中说明如何在同一台机器或网络上的应用程序间实现进程间通信。访问MSMQ通过.NET访问队列由System.Messaging.MessageQueue对象完成。列表A说明了如何在一台名为“SRV-MESSAGING"的计算机上访问TechRcpublic队列。列表AMessageQueuequeue=newMessageQueue(z/SRV-MESSAGINGTechRepu

3、bIic,z);注:要应用这个对彖,你必须在你的项冃中添加一个参考。现在我们冇了一个MessageQueue对象,这个对象为你提供与队列交互盂要的所冇功能。如果队列不存在,你町以调用MessageQueue对彖的静态Create方法编程建立队列。列表B中的代码说明如何检杳队列是否存在,建立队列或给队列添加一个参考。列表BMessageQueuequeue=null;stringqueueName="SRV-MESSAGINGTechRepublic";if(MessageQueue.Exists

4、(queueName))queue二newMessageQueue(queueName);elsequeue=MessageQueue.Create(queueName,false);改写队列改写队列时,用到MessageQueue.Send方法。歹!J表C举例说明如何向TechRepublic队列发送一条消息。列表Cqueue.Send("Mymessagebody","MessageLabel");在这个例子中,我们给TechRepublic队列发送一条正文为"Mymessagebody”的

5、消息,并对这个消息应用了一个"MessageLabel"标签。消息标签允许你不需阅读消息正文就可以分割消息。如果从计算机管理控制台中查看队列,还可在“队列消息”部分看到这些标签。读取队列可以使用儿种方法从队列中读取消息。最常见的情况是从队列小取出所有消息,然后一次性处理它们。这时要调用MessageQueue.GetAl1Messages方法。列表D举例说明如何应用这个方法。歹!J表DSystem.Messaging.Message[]messages二queue.GetAlIMossages(

6、);foreach(System.Messaging.Messagemessageinmessages)//Dosomethingwiththemessage.你也口J以用GetMessagcEnumerator2方法代替上面的MessageQueue.GetAlIMossages方法。虽然这两个方法的用法类似,但GetMessageEnumerator2M能向前(forward-only)。对于非常庞大的队列,则应用使用这个方法,而不是MessageQueue.GetAl]Messages方法

7、。这是因为GetAlIMossages方法领取所有消息,把它们保存在当地内存中;而GetMessageEnumerator2方法只领取当前消息在木地保存,在调用MoveNext时才领取下一条消息。列表E举例说明了GetMessageEnumerator2方法的用法。这段代码检查队列中的每一条消息,再删除它。列表EMessageEnumeratorenumerator=queue.GetMessageEnu口耐泣。!^();while(enumerator.MoveNext())enumerato

8、r.RemoveCurrent();在使用GetMessageEnumerator2方法时,还要考虑另外一个问题,即你要访问队列屮增加的任何新消息,即使它们是在你调用GetMcssagcEnumerator2后再增加的。这假定新消息被添加到队列末尾。如果你只希望返回队列中的笫一条消息,你应该使用MessageQueue.Receive方法。这个方法会领取队列中的笫一条消息,在这个过程中将它从队列中删除。由于消息在读収的时候被删除,你可以确保你的进程是唯一收到消息的进程。Receive方法的应用实

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。