扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:builder.com.cn 2007年3月2日
在本页阅读全文(共4页)
在前面的文章中,我说明了基于消息的系统背后的理论,并介绍了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
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者