创建 Service Broker 对象

适用于SQL ServerAzure SQL 托管实例

应用程序通过执行在数据库中定义的 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 实例之间发送消息,建议创建一个脚本来定义服务的消息类型和协定,以及定义队列和服务的第二个脚本。 第一个脚本定义服务的接口,即起始服务和目标服务所共有的对象。 第二个脚本定义服务名称和队列,即会话一端的对象。

本部分内容

Article Description
创建 Service Broker 消息类型 介绍消息类型及其使用方式。
创建 Service Broker 协定 介绍约定及其使用方式。
创建 Service Broker 队列 介绍队列及其使用方式。
创建 Service Broker 服务 介绍服务及其使用方式。
为 Service Broker 对象命名 介绍命名 Service Broker 对象的注意事项。
服务脚本示例 介绍 Transact-SQL 代码示例并定义服务。