创建 Service Broker 对象

应用程序通过执行在数据库中定义的 Service Broker 对象上运行的 Transact-SQL 语句使用 Service Broker。本节介绍为应用程序创建 Service Broker 对象时的一般注意事项。

概述

Service Broker 对象用于为一组特定的任务定义元数据和存储:

  • “消息类型”用于定义会话中交换的数据。

  • “约定”用于定义任务。每个约定都会指定可在特定会话中使用的消息类型,以及会话的哪端可发送消息。

  • “队列”用于存储服务的传入消息。

  • “服务”表示一组相关的业务任务。服务的名称还用于查找服务的队列。

请注意,一个约定依赖于一个或多个消息类型。一个服务依赖于一个队列,并可依赖于一个或多个约定。因此,约定创建于消息类型之后,删除于消息类型之前。服务创建于队列和约定之后,删除于队列和约定之前。

为服务创建对象

不管相应服务是起始服务、目标服务,还是既是起始服务又是目标服务,创建服务的基本步骤都大体相同。

服务的定义指定可能以相应服务为目标的约定。而应用程序可以使用服务来启动使用数据库中定义的任何约定的会话。Service Broker 采用此方法来强制服务仅应接收应用程序可以处理的消息的一般规则。为了确保应用程序不接收任意类型或未知类型的消息,仅当新对话遵循服务中所指定的约定时,Service Broker 才接受该对话。起始服务会指定会话开始时使用的约定,因此起始服务不需要在服务定义中包括约定。

若要为服务创建对象,请执行以下操作:

  1. 创建定义您的服务将用于完成任何所需通信的消息的消息类型。您可以自行定义这些类型,也可以从您的服务将与其通信的服务的创建者那里获取脚本来创建类型。如果数据库已包含您的服务需要的消息类型,则可以跳过此步骤。

  2. 创建一个或多个约定,以定义此服务可以参与的会话的结构。您可以自行定义此约定,也可以从您的服务将与其通信的服务的创建者那里获取脚本来创建约定。如果数据库已包含您的服务需要的约定,则可以跳过此步骤。

  3. 创建队列。Service Broker 使用此队列接收和存储服务的传入消息。有关创建队列的详细信息,请参阅 CREATE QUEUE。每个服务都必须具有一个队列。为了进一步简化编程和管理,每个服务通常都使用专用于该服务的队列。如果您的服务需要消息保持,请为队列指定消息保持。

  4. 创建服务。服务定义指定服务使用的队列以及以此服务为目标的约定。

在大多数情况下,您需创建目标服务,然后使用为目标服务创建的约定和消息类型来创建起始服务。然而,在某些情况下,您可能需要为已经定义的起始服务创建目标服务。在这些情况下,目标服务使用起始服务所使用的消息类型和约定。例如,如果您要创建目标服务以接收事件通知,则需要使用约定 **https://schemas.microsoft.com/SQL/Notifications/PostEventNotification**,因为这是起始服务使用的约定。

管理对象定义

建议为您的应用程序使用的 Service Broker 对象创建 Transact-SQL 脚本。使用此 Transact-SQL 脚本可以简化对 Service Broker 对象的具体内容的引用。此脚本还提供了一种在不同系统上部署服务或重新创建服务(如有必要)的方法。

如果您的应用程序涉及在 SQL Server 实例之间发送消息,则建议您创建两个脚本:一个定义服务的消息类型和约定,一个定义队列和服务。第一个脚本定义服务的接口,即起始服务和目标服务所共有的对象。第二个脚本定义服务名称和队列,即会话一端的对象。

本节内容