快速业务通道

在ASP.NET中进行消息处理(MSMQ) 二

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
面给出示意性代码,有兴趣的朋友可以直接下载本文示例程序代码了解更多。

普通的消息发送示意性代码:

1 //连接到本地的队列
2 MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
3 Message myMessage = new Message();
4 myMessage.Body = "消息内容";
5 myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
6 //发送消息到队列中
7 myQueue.Send(myMessage);

启动了事务后的消息发送示意性代码:

1 //连接到本地的队列
2 MessageQueue myQueue = new MessageQueue(".\\private$\\myQueueTrans");
3
4 Message myMessage = new Message();
5 myMessage.Body = "消息内容";
6 myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
7
8 MessageQueueTransaction myTransaction = new MessageQueueTransaction();
9 //启动事务
10 myTransaction.Begin();
11 //发送消息到队列中
12 myQueue.Send(myMessage, myTransaction); //加了事务
13 //提交事务
14 myTransaction.Commit();
15 Console.WriteLine("消息发送成功!");

读取消息示意性代码:

1 //连接到本地队列
2 MessageQueue myQueue = new MessageQueue(".\\private$\\myQueueTrans");
3 myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
4 if (myQueue.Transactional)
5 {
6  MessageQueueTransaction myTransaction = new MessageQueueTransaction();
7  //启动事务
8  myTransaction.Begin();
9  //从队列中接收消息
10  Message myMessage = myQueue.Receive(myTransaction);
11  string context = myMessage.Body as string; //获取消息的内容
12  myTransaction.Commit();
13  Console.WriteLine("消息内容为:" + context);
14}

三、异步消息处理

在MSMQ中对消息的操作分有同步化操作和异步化操作两种,那两者到底有何区别呢?简单的说同步化操作就是一项操作没有完成前它将堵塞整个进程直到操作完成,下一项操作才会执行。所谓异步化操作则相反,不会堵塞启动操作的调用线程。如果你想在检索消息但不想堵塞其他程序的执行,则可使用异步消息处理。

在MSMQ中异步接收消息使用BeginReceive方法和EndReceive方法来标记操作的开始和结束,异步查看消息则使用BeginPeek和EndPeek两个方法来标记异步读取的开始和结束。同时,异步接收和查看消息还可以指定超时时间,关于这点我在后续文章里再做详细的介绍,有兴趣的朋友可以关注。

这里我将使用《ASP.NET中进行消息处理(MSMQ)一》一文里使用过的Book类来作为消息传输,没阅读过的朋友请先阅读这篇文章,了解Book类的结构。下面提供了一个示例,创建队列和发送消息到队列在前面我们已经使用多次了这里就不贴代码了,发送消息这里与第一篇文章中介绍如何发送一个复杂的类型信息到队列比,只是多了事务处理,详细如下:

1/**//// <summary>
2/// 发送消息到队列
3/// </summary>
4private static void SendMessage()
5{
6  MessageQueue myQueue = new MessageQueue(".\\private$\\myAsyncQueue");
7  if (myQueue.Transactional)
8  {
9    Book book = new Book();
10    book.BookId = 1001;
11    book.BookName = "ASP.NET";
12    book.BookAuthor = "ZhangSan";
13    book.BookPrice = 88.88;
14    Message message = new Message(book);
15    message.Formatter = new XmlMessageFormatter(new Type[] { typeof(MSMQ.As

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号