当前位置: 首页 > 图文教程 > 网络编程 > ASP > 了解MSMQ,控制ASP进程 (一)

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

了解MSMQ,控制ASP进程 (一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 84 ::
收藏到网摘: n/a

       我们在使用 ASP 程序时常常会遇到这些情况:某个进程花费了过长的时间而导致在客户端过期、访问者已经放弃了对你的网站的访问而离开去了别的网站、或你的服务器上阻塞了大量的死队列时,系统出现 "Server is too busy" 错误信息。

   当你在设计网站的过程中碰到这些问题时,一个有效的解决办法就是使用 Microsoft Message Queue (MSMQ) 来结束这些进程,让网站恢复正常!

   到底 MSMQ 是个什么样的东西呢?我们下面作一下了解:

   一、 Microsoft Message Queue 的基本介绍:

   MSMQ ( 代号又叫 "Falcon") 是运行在 Windows NT 的服务 , 它提供运用程序之间的异步通讯。你可以在 NT4 Option Pack 中找到它。 MSMQ 的基本概念非常的简单:它可以被看成是运用程序之间的 email :一个消息被打包到一个特定类型的容器中,并把这个消息保存到一个用与特别作用的队列中直到收信者接受该消息为止。这些队列能够确保 MSMQ 的传送,而不管当前网络连接的状况如何。

   象所有的电子邮件一样, MSMQ 消息有一个发送者和一个接收者 , 其中的接收者应该能够访问队列。一个单一队列中的一个单独消息,它拥有多个接受者例如 respinder 。而消息的发送者通常是 Web Server(IIS) 。

   MSMQ 也能够和其他消息系统进行通讯。例如: Sun Solaris, HP-UNIX,OS/2, VMS, AS/400 平台。像其他的 BackOffice 服务一样, MSMQ 有一个 COM API ( mqoa.dll ) 提供给开发者开发程序。其中最常用的三个类为: MSMQQueueInfo, MSMQQueue, MSMQMessage 。

   ( 1 )、 MSQMQueueInfo

   MSMQQueueInfo 允许你新建,打开,删除队列中的消息 . 要和队列建立联系首先需要设置 PathName ,这是一个命名队列的属性,它告诉 MSQM 是哪台机器上的队列。
< %
Dim objQueueInfo
Dim objQueue
Set objQueueInfo=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
Set objQueue = objQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
%>


   上面的代码打开一个叫 MyQueue 的本地队列。如果队列在另外一台服务器上,代码应该是这样的:

   objQueue.PathName = "SomeOtherComputer\MyQu"

   打开队列中有两个参数: Access 和 ShareMode 。 Access 表示将要对队列执行什么操作。一般有三个操作:

   MQ_PEEK_ACCESS (32), MQ_RECEIVE_ACCESS (1), MQ_SEND_ACCESS (2) 。

   MQ_PEEK_ACCESS 用来在特定的队列中查找消息。但对该消息不进行操作。

   MQ_RECEIVE_ACCESS 用来在读取队列中的消息后删除它。

   MQ_SEND_ACCESS 用来在队列中发送消息 , 但不接收消息。

   需要注意的是在使用打开操作后返回了一个 MSMQQueue 对象。下面是一个典型的新建和删除操作例子:
< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Create
%>

< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Delete
%>


   ( 2 )、 MSMQQueue

   MSMQQueue 类用来描述一个在 MSMQ 服务中打开的队列。该类提供了一个用来在指针队列中的消息进行循环的功能。你不能够打开一个使用了 MSMQQueue 类的队列要这么干只能够使用 MSQMQueueInfo (见上例),虽然许多 ASP 运用程序通常使用 MSMQ 来发消息,但是很多时候也需要 ASP 来显示这个消息的具体内容。

   获取消息的方式有两种:同步方式,异步方式,但是 ASP 只能够使用同步方式。这是因为 ASP 不能够在服务端申明一个 WithEvents 变量。

   下面先举一个异步方式使用 MSMQ 的例子(仅 VB 中)
Option Explicit
Dim m_objQueueInfo As New MSMQQueueInfo
Dim m_objQueue As MSMQQueue
Dim WithEvents m_objMSMQEvent As MSMQEvent

Private Sub Form_Load()
m_objQueueInfo.PathName = ".\MyQu"
m_objQueueInfo.Label = "My Sample Queue"
On Error Resume Next
m_objQueueInfo.Create
On Error GoTo 0
Set m_objQueue = m_objQueu