队列化组件使我们能够创建一旦客户端和服务器连接就立即执行的组件,它提供了异步调用和执行组件的简单方法。如果客户端和服务器没有连接,这类组件就会停止执行,直到再次连接。我们可以使用队列化组件创建与时间无关的COM+应用程序。使用消息和队列有助于应用程序处理客户端在非联机状态下的情况,也能增加系统的可靠性和可伸缩性。
队列化组件对于企业级应用程序的开发具有重大的意义,尤其是对于处于非联机状态下的客户端应用程序和在PDA上运行的应用程序而言,如果找不到服务器端的组件,Windows就会执行客户端计算机上的组件。这是一种全新的组件实现方式,我们不能再假设在调用时组件都是在内存中的,它可能是在本地机上也可能是在远程计算机上。这种方式可能会导致几种值得注意的可能,但它们要求完全重新考虑应用程序的设计。队列化组件是COM+的一项关健特性,它完全基于微软消息队列服务(MSMQ),提供了一种异步调用和执行组件的全新方式。
在设计新的应用程序时,开发者在编写组件时必须考虑采用实时(同步)或队列化(异步)处理方式,处理方式的最终选择依赖于特定应用程序的要求以及哪种方式更能够满足应用程序所服务的商业逻辑。使用队列化处理方式可能能够满足一些应用程序的要求,而使用实时(同步)处理方式则可能是另一些应用程序最好的选择。与实时处理方式相比,队列化处理方式有下列优点:
?组件的可用性
?组件的寿命
?非联机应用程序
?消息可靠性
?服务器调度
?更好的队列基础
在COM+ 1.0的队列化组件服务中,组件需要有域控制器对队列化请求进行授权,这意味着,如果没有域控制器,就必须关闭COM+ 1.0应用程序的授权服务。通过与正常的同步调用相分离,COM+ 1.5针对队列请求提供了可配置的安全验证。应用程序的队列标签允许我们对队列处理方式的授权进行配置。
改进的队列化组件支持有助于我们管理一个应用程序能够拥有的并发组件的最大数目。由于每个用户的组件都是在独立的线程上创建的,生成和维护一个用户的组件所需要的运行代价是非常小的,如果用户组件的数目太多,应用程序就可能停止执行。一旦应用程序被配置成对同步调用方式使用授权的方式,队列标签就会使我们对微软消息队列(MSMQ)域控制器授权进行操作。一定不能在应用程序中对队列化调用进行授权,选择这种方式会使我们在无需域控制器的情况下就能够使用队列组件。
如果我们对组件的数量进行限制,而组件数量达到这一限制后,监听程序就不会再产生新的组件了。队列化组件的调用仍然保留在应用程序的队列中,使得正在执行的调用得以执行和完成。这种限制也有助于负载平衡,而且可以与应用程序池技术同时使用。