- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c#实现消息机制.doc
顾名思义,微软消息队列(MSMQ)是一种给队列发送消息以便稍后进行处理的方法。消息由一个 “Producer”(牛产者)应用程序发送出去,再由一个“Consumer”(消费者)应用程序返回。
这两个应用程序可以在同一台机器上,在整个网络中,或甚至是位于并不总是连接在一起的不同机器 上。MSMQ具有故障保险特性,因为如果第-?次传送失败,它会重新发送消息。这样可保证你的应用程序 消息到达它们的目的地。
我将应用一个叫做“TechRopublic”的队列。当你运行木文下载版本中的样本实例吋,如果这个队列 不存在,它会H动建立。
在前面的一篇文章中,Zach Smith说明了如何使用TPC通道在同一台机器上的两个进程间通信。他将 在本文中说明如何在同一台机器或网络上的应用程序间实现进程间通信。
访问MSMQ
通过.NET访问队列由System. Messaging. MessageQueue对象完成。列表A说明了如何在一台名为 “SRV- MESSAGING的计算机上访问 TechRcpublic 队列。
列表A
MessageQueue queue = new MessageQueue (z/SRV-MESSAGINGTechRepub I ic,z);
注:要应用这个对彖,你必须在你的项冃中添加一个参考。
现在我们冇了一个MessageQueue对象,这个对象为你提供与队列交互盂要的所冇功能。
如果队列不存在,你町以调用MessageQueue对彖的静态Create方法编程建立队列。列表B中的代码 说明如何检杳队列是否存在,建立队列或给队列添加一个参考。
列表B
MessageQueue queue = null;
string queueName = SRV-MESSAGINGTechRepublic;
if (MessageQueue. Exists(queueName))
queue 二 newMessageQueue(queueName);
else
queue = MessageQueue. Create(queueName, false);
改写队列 改写队列时,用到MessageQueue. Send方法。歹!J表C举例说明如何向TechRepubl ic队列发送一条消息。
列表C queue. Send(My message body, Message Label);
在这个例子中,我们给TechRepublic队列发送一条正文为My message body”的消息,并对这个消 息应用了一个Message Label标签。消息标签允许你不需阅读消息正文就可以分割消息。如果从计算 机管理控制台中查看队列,还可在“队列消息”部分看到这些标签。
读取队列
可以使用儿种方法从队列中读取消息。最常见的情况是从队列小取出所有消息,然后一次性处理它 们。这时要调用MessageQueue. Get Al 1 Messages方法。列表D举例说明如何应用这个方法。
歹!J表 D System. Messaging. Message[] messages 二 queue. GetAlIMossages(); foreach (System. Messaging. Message message in messages)
//Do something wi th the message.
你也口J以用GetMessagcEnumerator2方法代替上面的MessageQueue. GetAl IMossages方法。虽然这两 个方法的用法类似,但GetMessageEnumerator2 M能向前(forward-only)。对于非常庞大的队列,则 应用使用这个方法,而不 是MessageQueue. GetAl]Messages方法。
这是因为GetAlIMossages方法领取所有消息,把它们保存在当地内存中;而GetMessageEnumerator2 方法只领取当前消息在木地保存,在调用MoveNext时才领取下一条消息。列表E举例说明了 GetMessageEnumerator2方法的用法。这段代码检查队列中的每一条消息,再删除它。
列表E
MessageEnumerator enumerator = queue. GetMessageEnu口耐泣。!^ (); while (enumerator. MoveNext()) enumerator. RemoveCurrent();
在使用GetMessageEnumerator2方法时,还要考虑另外一个问题,即你要访问队列屮增加的任何新消 息,即使它们是在你调用GetMcssagcEnumerator2后再增加的。这假定新消息被添加到队列末尾。
如果你只希望返回队列中
您可能关注的文档
- 2018年春部编人教版二年级语文下册第1课《古诗二首村居》教学设计9.doc
- 2018年机械工程师年度工作总结范文两篇.doc
- 2018年村干部两学一做心得体会三篇.doc
- 2018年泰山景区农村工作意见.doc
- 2018年淘宝客服工作个人年度总结.doc
- 2018年渔业渔政工作要点.doc
- 2018年煤矿职业病防治计划与实施方案.doc
- 2018年的劳动合同范本.doc
- 2018年社区党风廉政建设自查报告.doc
- 2018年秋语文S版六年级语文上册学科教学计划.doc
- DB44_T 2607.4-2025 滨海蓝碳碳汇能力调查与核算技术指南 第4部分:盐沼.pdf
- DB43_T 3178-2024 烟叶农场建设管理要求.pdf
- DB37_T 4838-2025 含氢分布式综合能源系统运行优化指南.pdf
- DB37_T 4834-2025 高速公路集中养护工作指南.pdf
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
最近下载
- 文职技能岗工程机械维修试题.doc VIP
- 2024年江西·农商银行员工招聘真题.docx VIP
- 仪器名称:长春迪瑞 H-300 尿液分析仪型号: H-300.pdf VIP
- 2024年江西农商银行员工招聘真题.docx VIP
- 2023年广东工业大学软件工程专业《操作系统》科目期末试卷A(有答案).docx VIP
- 2024年江西·农商银行员工招聘笔试真题.docx VIP
- 人卫九版心血管PPT:第二章 心力衰竭.ppt
- 历年江西农商银行员工招聘笔试真题2024 .docx VIP
- 2024年江西•农商银行招聘真题.docx VIP
- 【人教版】四年级上册数学课件《平行与垂直》(共20张PPT).pptx
文档评论(0)