- 浏览: 117501 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
jianxia801:
哥们你这个比较适用,但是无法下载!还有一个问题,你这个斜线回跟 ...
用js作表格的表头斜线 -
jianxia801:
哥们你的这个表格不错 不知道是否源码给我发送一份多谢先。你的无 ...
用js作表格的表头斜线 -
mistbow:
请问您知道有能编辑数学公式的文本编辑器吗?
几款在线文本编辑器的比较 -
sulangdong:
下载地址不可用,我QQ:592207250,邮箱:suxut ...
用JS+vml作三维报表 -
wushanlang:
很好!!先试试
JS的TreeGrid控件,累死我了!
直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便利与最好的用户体验.
1.首先在需要进行消息队列的服务器上安装MSMQ,我的系统是win2003+iis6,所以这个安装选项在添加删除程序->windows组件->应用程序服务器内.默认是不安装的,需要手动选择.
2.建立消息队列的存放路径.这可以在windows的计算机管理内添加,也可以在程序中添加.我是在程序中添加.
3.在.net中要引用System.Messaging;
using System; using System.Collections.Generic; using System.Messaging; namespace MSMQ { class Program { private const string path = @".\private$\ljz"; private static MessageQueue queue = MessageQueue.Exists(path) ? new MessageQueue(path) : MessageQueue.Create(path, true); //private static List<string> list = new List<string>(); public enum Level { Low, Normal, High } static void Main(string[] args) { Send("第一次!", Level.Low); Send("第二次!", Level.Normal); Send("第三次!", Level.High); Console.WriteLine(Receive()); Console.WriteLine(Receive()); Console.WriteLine(Receive()); Send("异步第一次!", Level.Normal); Send("异步第二次!", Level.High); Send("异步第三次!", Level.Low); ReceiveByAsyn(); //foreach (string str in list) //{ // Console.WriteLine(str); //} Console.ReadKey(); } public static void Send(string content, Level level) { System.Messaging.Message message = new System.Messaging.Message(); message.Formatter = new System.Messaging.BinaryMessageFormatter(); message.Body = content; switch (level) { case Level.Low: message.Priority = MessagePriority.Low; break; case Level.High: message.Priority = MessagePriority.High; break; default: message.Priority = MessagePriority.Normal; break; } //MessageQueueTransaction tran = new MessageQueueTransaction(); //try //{ // tran.Begin(); // queue.Send(message); // tran.Commit(); //} //catch //{ // tran.Abort(); //} queue.Send(message, MessageQueueTransactionType.Automatic); } public static string Receive() { System.Messaging.Message message = queue.Receive(); message.Formatter = new System.Messaging.BinaryMessageFormatter(); return message.Body.ToString(); } public static void ReceiveByAsyn() { queue.ReceiveCompleted += new ReceiveCompletedEventHandler(queue_ReceiveCompleted); queue.BeginReceive(); } private static void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) { MessageQueue queueTmp = sender as MessageQueue; System.Messaging.Message mess = queueTmp.EndReceive(e.AsyncResult); mess.Formatter = new System.Messaging.BinaryMessageFormatter(); Console.WriteLine(mess.Body.ToString()); //list.Add(mess.Body.ToString()); queueTmp.BeginReceive(); } } }
下面对以上代码作几点解释:
1.上面的代码没有加异常处理,其实像这类代码是一定要加异常处理的!
2.路径.消息队列有好几种,有的可以被别人访问,如公共队列,有的则只能自己访问,如:专用队列.具体的分类,请参看下面列出的参考文章.但不是每种都可以使用.象我这种工作组模式的电脑,只能使用专用队列,即只能自己访问自己.它们的路径写法是有区别的:
Public: [MachineName]\[QueueName] Private: [MachineName]\Private$\[QueueName]
3.使用消息队列有两个重要的类:System.Messaging.Message与System.Messaging.MessageQueue.我之所以列出全名,是因为在.net中有同名类,不要弄混了.下面的MessageQueue与Message特指上面两个类.
MessageQueue是消息队列对象,里面有两个重要的方法:Send与Receive.顾名思义,Send是向消息队列发送消息,Receive是从消息队列接收消息.
Message是消息对象.它有两个重要的属性Formatter是其内容序列化格式属性,Body是其存放内容的主体.在上面的例子中我放的是字符串,其实它还可以放对象,前提是对象必须可以被序列化.
根据以上说的内容,己经可以写出一个消息队列的Demo了,但是还不够实用,下面要说的是其一些实用的属性.
1.优先级.不可否认,在实际应用中消息是有优先级的,有的消息重要需要优先被处理有的消息则一般.如何体现呢?Message对象有Priority属性,它有8个等级,我在上面的例子中只用了其中三个.通过设置优先级,可以实现让重要的消息优先被处理.
2.事务.有时候,在传输数据的过程中,需要保证数据的一致性,在数据库中常常用到事务,其实这里也有事务,在上面的例子中56-66行代码是事务处理,但是写的比较累赘,其实可以采用67行的写法,让系统自己去维护.
3.异步处理.MessageQueue对象的Receive方法有个缺点,当队列中没有数据时线程会锁死,直到有新的数据进入.这其实是不好的.一种更好的处理方式是新开辟一个线程去处理,这样就不会影响现有的线程了.在.net中写法为例子的80与81行,让消息对象加载一个委托,然后把处理代码放在委托内.
代码的第11行,32-35行,90行是我有意注掉的,其实我想的是当异步处理消息时,所做的应该只是把数据取出来就可以了,不应该还在里面进行处理.而是在别的地方再对数据进行处理.我声明了个局部变量list,按理说第90行数据取出来后应该能加入这个list,然而事实是取出的数据有时能加进去,有时却不行.我想这应该是多线程的问题..net默认禁止线程间互相内部调用.list是主线程的变量,打开异步后在子线程对其赋值,是不被允许的.但是我想不通的是为什么有时候却也能赋值成功.也许是我理解有误.如果哪位牛人看到了我的困惑,希望能对我指点一二.现在我对多线程还不甚了解.(汗一个~~~)
其实,个人认为,消息队列的应用范围还是比较有限的,首先,他只能是window系统,在.net下调用,然后,它对网络带宽要求比较高.所以在局域网内应用还是比较好的,在interent上的应用,其实有更好的解决方案:.net remoting与web services
Demo下载:
http://ljzforever.qupan.com/?folder=951925
参考的文章:
ASP.NET中进行消息处理(MSMQ)一
http://dev.yesky.com/178/8196178.shtml
ASP.NET中进行消息处理(MSMQ)二
http://dev.yesky.com/229/8196229.shtml
.net+msmq快速访问数据库
http://developer.ccidnet.com/art/322/20030214/37984_1.html
消息队列(Message Queue)简介及其使用
http://www.cnblogs.com/rickie/archive/2004/11/16/64345.html
msmq两个网域之间消息传输与接收测试总结
http://www.cnblogs.com/billqi/archive/2005/12/29/307371.html
MSMQ在ASP.NET中的应用问题?谢谢!
http://topic.csdn.net/t/20020829/11/979610.html
. Net环境下消息队列(MSMQ)对象的应用
http://www.cnblogs.com/rickie/archive/2004/11/17/64712.aspx
.net的MSMQ异步调用
http://www.wangchao.net.cn/bbsdetail_37204.html
使用MSMQ
http://myxq.cnblogs.com/archive/2005/03/15/119150.aspx
发表评论
-
关于用户控件中文件链接的处理
2009-08-06 15:19 1221最近在开发网站, ... -
petshop4.0学习笔记之设计模式
2009-06-05 00:09 1262在petshop4.0中也用到了几个常用的设计模式:简单工厂模 ... -
petshop4.0学习笔记之多线程
2009-06-03 16:12 1065一直搞web开发,每天接触最多的就是asp.net+css+j ... -
vs2005中母版页嵌套时无法切换到设计视图的解决办法
2009-05-20 13:50 1795假设有母版页第一级母 ... -
asp.net 编译模型学习笔记
2009-05-15 17:31 1663当一个web应用程序完成 ... -
asp.net 母版页学习笔记
2009-05-15 00:12 1130看来父亲对儿子永远是最了解的。看了Asp.net之父Scott ... -
asp.net ViewState学习笔记
2009-05-13 14:41 1085这些还是前辈们都研究 ... -
asp.net底层架构学习笔记(HttpRuntime,HttpApplication...)
2009-05-12 23:19 1524这些个东东我都是学习前辈,该说的前辈都已说过了,该做的前辈也已 ... -
asp.net中控件id,clientid,uniqueid的区别
2009-04-27 14:13 1520id是你在代码编写时给其赋的id属性,如果没有进行赋值 ... -
浅析asp.net的自定义控件
2009-04-26 15:46 880自定义控件分两种:简 ... -
httphandlers 与 httpmodules
2009-04-25 16:48 2087HttpHandlers 和 HttpMod ... -
asp.net 缓存研究
2009-04-24 09:37 1228最近因项目要求,需要研究asp.net缓存,可是查阅了书本,m ... -
如何以编程方式加载用户控件
2009-04-23 14:35 1030有用户控件文件:usercon.ascx,类名为:myCont ... -
web.config常用配置研究
2009-04-18 17:54 1290web.config 是asp.net的Web应用程序不可缺少 ... -
eval,bind,container.dateitem,数据绑定的研究
2009-04-17 14:49 1608首先,eval与bind是两个方法,都可以实现前台数据绑定Bi ... -
asp.net2.0 知识体系
2009-04-15 09:37 812入行计算机软件行业13个月了,搞.net开发也快1年了,跟据在 ... -
asp.net 的状态管理与cache
2009-04-14 15:10 1172在我的印象中,谈到状 ... -
asp.net的下载实现
2009-04-09 14:40 1039我现在接触到的下载有两种形式: 直接下载服务器某个目录下的文件 ...
相关推荐
### PetShop4.0 学习笔记(1) #### 背景介绍 根据描述,作者之前一直在使用.NET 1.1进行开发工作,并计划转向.NET 2.0。但是由于公司使用的服务器版本为Windows 2000,升级.NET框架会遇到一系列问题,包括可能与...
《PetShop 4.0:深入理解C#与ASP.NET应用开发》 PetShop 4.0是一款基于C#编程语言和ASP.NET框架的应用程序,它以宠物商店为业务场景,为开发者提供了一个完整的Web应用程序示例。这个项目旨在帮助学习者理解和掌握...
PetShop 4.0是学习.NET开发的绝佳案例,它提供了详细的源代码,可以帮助开发者理解.NET的实战应用。通过分析和重构PetShop 4.0,开发者可以提升自己的.NET编程技能,掌握企业级应用的开发方法。 总结,PetShop 4.0...
《PetShop 4.0 全面解析》 PetShop 4.0 是一个经典的.NET技术示例应用,它展示了如何构建一个完整的电子商务网站。这个详细的教程将带你深入理解PetShop 4.0的设计理念、架构和技术栈,帮助你提升在.NET领域的专业...
PetShop 4.0是这个系列的最新版本,它全面采用了微软的.NET Framework 2.0和Asp.Net技术,为我们提供了深入学习.NET设计模式和架构的宝贵资源。 .NET Framework 2.0是微软推出的一种全面的开发框架,它包含了用于...
petshop4.0源代码 查看 petshop4.0源代码 查看 petshop4.0源代码 查看 petshop4.0源代码 查看 petshop4.0源代码 查看 petshop4.0源代码 查看
《PetShop4.0:深度探索与学习指南》 PetShop4.0是一个经典的应用程序示例,由Microsoft开发,用于展示.NET Framework的功能和最佳实践。这个项目以其标准的分层架构闻名,不仅包含了前端界面,还包括了业务逻辑层...
通过深入研究PetShop 4.0的源码,开发者不仅可以学习到.NET Framework的基础知识,还能掌握到高级特性的实际应用,例如面向服务的架构(SOA)、设计模式、缓存策略等,这些都是构建高效、可扩展的Web应用程序的关键...
### Petshop4.0详解之系统架构设计 #### 前言 PetShop是一个由微软推出的示例项目,旨在展示.NET框架在企业级应用开发中的能力。随着时间的推移,PetShop经历了多个版本的迭代,从最初的.NET 1.x发展到了基于.NET ...
.NET PetShop 4.0 还包含了新的功能,如自定义的ASP.NET 2.0 配置文件提供程序和通过MSMQ(Microsoft Message Queuing)进行的异步订单处理,这些都是提高系统性能和可靠性的重要组成部分。 #### 从 ASP.NET 1.1 ...
PetShop 4.0 架构设计是一个经典的案例,展示了如何构建基于.NET Framework 2.0和Asp.Net的Web应用程序。这个系统以其简洁的三层架构而...通过学习PetShop 4.0,开发者能够提升自己在设计和实现企业级应用方面的能力。
在PetShop 4.0中,我们可以学习到以下几个重要的知识点: 1. **ASP.NET**:PetShop 4.0主要基于ASP.NET框架构建,这是一个用于构建动态网站、Web应用和Web服务的平台。它提供了诸如页面生命周期管理、控件模型、...
1. 开发流程:学习PetShop4.0可以帮助开发者了解一个完整的Web应用从需求分析、设计、编码到测试的全过程,理解每个环节的关键点。 2. 技术实践:通过研究PetShop4.0的源代码,可以加深对ASP.NET框架的理解,掌握...
然而PetShop随着 版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却 也凸现了许多颇有价值的设计与...
《PetShop 4.0 源码深度解析与学习指南》 PetShop 4.0 是一个经典的ASP.NET应用程序示例,它以其简洁而全面的C#代码库,为初学者和经验丰富的开发者提供了深入理解Web应用架构的宝贵资源。这个项目不仅展示了ASP...
此资源包括PetShop4.0项目(Source Code+Databases)的安装以及PetShop4.0项目的详细说明文档。 注意1:请确保你已经安装了VS2005和(SQL Server2000或SQL Server2005或Oracle 10g)。 注意2:请按照安装提示一步步...
尽管PetShop4.0在某些方面(如未使用ORM)存在不足,但总体上它仍然为我们提供了一个很好的学习示例。通过细致地研究其设计原理和实现细节,我们可以从中汲取宝贵的经验和灵感,帮助我们在未来的项目中构建出更加...
PetShop 4.0的核心亮点之一是其使用了ASP.NET架构,包括以下几个关键部分: 1. **ASP.NET页面生命周期**:PetShop展示了如何处理页面从请求到响应的完整生命周期,包括初始化、加载、验证、呈现和卸载等阶段。 2. ...
【标题】"PetShop4.0" 是一个基于.NET框架的示例应用程序,展示了三层架构在实际项目中的应用。这个项目作为一个学习资源,为开发者提供了一个理解如何在企业级应用中分离业务逻辑、数据访问和用户界面的实例。 ...