科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何在SQL Server 2005中使用Service Broker内部激活

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中,我将带领你建立一个小型的Service Broker应用程序,它使用内部激活(Internal Activation)来处理所提交的消息。

作者:builder.com.cn 2007年3月2日

关键字: SQL Server

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

列表A中的脚本建立我用作激活过程的存储过程。每次有消息到达SalesQueue队列时,就调用这个过程。

在这个过程中,我使用新的TSQL结构RECEIVE从SalesQueue队列中提取消息。(RECEIVE非常类似于SELECT语句,不同之处在于RECEIVE从队列中提取消息。)如果你需要查看消息的内容,但并不移动它们,你可以在队列上运行SELECT语句,就像在表中一样。

当我从队列收到一条消息时,我把来自队列的域值保存在当地变量中。我对@Message变更特别感兴趣,它将保存我提交到队列的XML文件。因为消息的正文以XML保存,我可以使用XQuery语句从XML文件中提取数据。我提取的数据是我提交到最初过程的变量。一旦我“切碎”了XML数据,我只需简单把这些值插入Sales表中。

既然我计划给SalesService服务发送消息,我需要一个发送消息的服务和队列。下面的语句建立RecordSalesQueue和RecordSalesService队列,后者被附加到RecordSalesQueue上。

CREATE QUEUE [RecordSalesQueue];

CREATE SERVICE [RecordSalesService] ON QUEUE [RecordSalesQueue];

GO

当你对一个Service Broker队列使用内部激活时,你需要启动内部激活并指定你将调用的存储过程。我最初建立SalesQueue时没有启动它,因此现在我必须启动它。这个操作用ALTER QUEUE语句来完成,如下:

ALTER QUEUE [SalesQueue] WITH ACTIVATION

(

STATUS = ON,

MAX_QUEUE_READERS = 1,

PROCEDURE_NAME = usp_RecordSaleMessage,

EXECUTE AS OWNER

);

GO

列表B中的脚本建立我在输入销售信息时将要用到的过程。我将保持简化,因此我仅向过程提交三个变量(尽管这不是一个很大的交易,但如有必要,可以提交更多变量)。

在这个过程中,你会注意到,我把提交到过程的参数插入到一个临时表中;然后我查询临时表,把结果集放到一个XML变量中。这种方法可以方便地把你的数据格式化成XML,而不用动态建立一个XML字符串。

实际上,BEGIN DIALOG CONVERSATION处理从RecordSalesService向SalesService提交消息的过程。这个语句返回一个会话句柄,你可以使用它来发送消息。SEND ON CONVERSATION语句执行发送XML消息的工作,SELECT语句从临时表中建立这个XML消息。

现在,我已经为激活过程做好准备,只等消息到达。要看它如何运行,执行下面的存储过程:

EXECUTE usp_SendSalesInfo '1/9/2005',30,90

执行这个过程后,运行下面的SELECT语句看Sales表中是否插入一条记录。

SELECT * FROM Sales;

内部激活的优点

我可能会看着上面的例子,心里想:“这有什么好处?不过是往表中增加一条记录而已!”在这种情况下,这是一个合理的问题。但是,不要遗漏这个例子背后的理念。

消息应用程序的目的是帮助你发送一条消息,并继续进行你的工作。在上面的例子中,如果从触发器中调用usp_SendSalesInfo存储过程,就需要在触发器下次激活前插入记录。如果触发器要完成许多处理工作,这肯定会造成系统瓶颈。但是,如果你只使用存储过程向队列传送消息,触发器就可以迅速地完成处理工作,而且可以在后台完成这些工作。

Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的IT行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章