如何在SQL Server 2005中使用Service Broker内部激活

开发者在线 Builder.com.cn 更新时间:2007-03-02作者:builder.com.cn 来源:

本文关键词: TimChapman sqlserver SQL Server 2005 SQL Server 2005

在前面的文章中,我说明了基于消息的系统背后的理论,并介绍了Service Broker组件——在数据库引擎中建立异步消息应用程序的SQL Server 2005新特性。在本文中,我将带领你建立一个小型的Service Broker应用程序,它使用内部激活(Internal Activation)来处理所提交的消息。

内部激活

在举例之前,我想提及一下Service Broker应用程序中的内部激活功能。在许多情况下,消息一到达队列就对它们进行处理,这种做法是合适的。在Service Broker应用程序中,你可以指定一个存储过程,只要有消息到达一个队列,就立即执行它。在某种程度上,它就像队列中的异步触发器。

使用这种技巧的优点在于,如果你的队列由于收到大量消息而陷入困境,你可以对队列进行设置,使它启动更多存储过程实例。我认为这是Service Broker应用程序的一项非常重要的功能,因此我将在下面的例子中分析内部激活的运行机制。

实例

这个例子说明如何调用一个提交Service Broker消息的存储过程,它反过来调用一个存储过程来处理第一个存储过程提交的消息。

USE master

GO

IF EXISTS(SELECT * FROM sys.databases where name = 'SB')

DROP DATABASE SB

GO

CREATE DATABASE SB

GO

ALTER DATABASE SB

SET ENABLE_BROKER

GO

上面的脚本用来建立这个例子使用的数据库环境。在我能够应用其功能之前,我首先必须在数据库中启动Service Broker;ENABLE_BROKER语句帮助我启动它。

下面的脚本建立一个Sales表,我在整个实例中都要用到它。

USE SB;

GO

CREATE TABLE Sales

(

SaleID INT IDENTITY(1,1),

SaleDate SMALLDATETIME,

SaleAmount MONEY,

ItemsSold INT

);

GO

为建立所需的Service Broker组件,我创建了MESSAGE TYPE和CONTRACT对象。MESSAGE TYPE对象确认消息的内容,它对会话获得的消息实行严格控制。CONTRACT对象指定所用到的MESSAGE TYPE对象,以及会话中消息的传送方向。

CREATE MESSAGE TYPE [RecordSale] VALIDATION = NONE;

CREATE CONTRACT [SalesContract]

(

[RecordSale] SENT BY INITIATOR

);

GO

这个应用程序将消息从一个Service Broker队列传递给另一个队列,因此我需要建立实现这些功能的脚本。首先,我建立SalesQueue,它将接收消息,并启动一个过程来处理它们。(SalesService处理进入的消息并把它们传递给SalesQueue。)

CREATE QUEUE [SalesQueue];

CREATE SERVICE [SalesService] ON QUEUE [SalesQueue]([SalesContract]);

GO

点击查看更多数据库技术文章
http://soft.zdnet.com.cn/software_zone/db.shtml

用户评论

  • 用户名
  • 评论内容