第 1 课:创建基本对话对象

适用于SQL ServerAzure SQL 托管实例

在本课中,了解如何生成使数据库支持数据库中对话的所有对象。

过程

启用 Service Broker 并切换到 AdventureWorks 数据库

备注

本文中的代码示例是使用 AdventureWorks2025 示例数据库进行测试的,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行它以确保 Service Broker 在 AdventureWorks2025 数据库中已启用,并将上下文切换到该数据库。

USE master;
GO

ALTER DATABASE AdventureWorks2022
    SET ENABLE_BROKER;
GO

USE AdventureWorks2022;
GO

创建消息类型

复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行代码为会话创建消息类型。 由于通常在数据库引擎的多个实例间引用 Service Broker 对象,因而大多数 Service Broker 对象的名称都是以 URI 格式指定的。 这有助于确保它们在多台计算机之间的唯一性。 这两种消息类型都指定 Service Broker 仅验证消息格式正确的 XML 文档,并且不会根据特定架构验证 XML。

CREATE MESSAGE TYPE [//AWDB/InternalAct/RequestMessage]
    VALIDATION = WELL_FORMED_XML;

CREATE MESSAGE TYPE [//AWDB/InternalAct/ReplyMessage]
    VALIDATION = WELL_FORMED_XML;
GO

创建协定

复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行代码为会话创建约定。 协定指定使用该会话的会话必须将 AWDB/InternalAct/RequestMessage 类型的消息从发起程序发送到目标,并将 AWDB/InternalAct/ReplyMessage 类型的消息从目标发送到发起程序。

CREATE CONTRACT [//AWDB/InternalAct/SampleContract]
    ([//AWDB/InternalAct/RequestMessage] SENT BY INITIATOR,
    [//AWDB/InternalAct/ReplyMessage] SENT BY TARGET);
GO

创建目标队列和服务

将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它来创建用于目标的队列和服务。 由于队列是从相同的数据库以类似于表和视图的方式引用的,因而队列名称的格式也类似于表名称或视图名称。 该 CREATE SERVICE 语句将服务与 TargetQueueIntAct 相关联。 因此,发送到服务的所有消息都会接收到 TargetQueueIntAct。 此外 CREATE SERVICE ,还指定只有使用之前创建的 AWDB/InternalAct/SampleContract 的对话才能将服务用作目标服务。

CREATE QUEUE TargetQueueIntAct;

CREATE SERVICE [//AWDB/InternalAct/TargetService]
    ON QUEUE TargetQueueIntAct
    ([//AWDB/InternalAct/SampleContract]);
GO

创建发起方队列和服务

将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它来创建用于发起程序的队列和服务。 由于未指定约定名称,因而其他服务不可将此服务用作目标服务。

CREATE QUEUE InitiatorQueueIntAct;

CREATE SERVICE [//AWDB/InternalAct/InitiatorService]
    ON QUEUE InitiatorQueueIntAct;
GO

下一步

已成功配置 AdventureWorks2025 以支持 //AWDB/InternalAct/InitiatorService//AWDB/InternalAct/TargetService之间的对话。