在 Service Broker 中实现内部激活

适用于SQL ServerAzure SQL 托管实例

本教程面向不熟悉 Service Broker,但熟悉数据库概念和 Transact-SQL 语句的用户。 它通过向他们展示如何实现内部激活存储过程来处理 Service Broker 消息来帮助新用户入门。

概念

本教程介绍如何使用内部激活存储过程创建支持基本请求-回复 Service Broker 对话所需的数据库对象。 然后,启动对话并使用它来传输消息。

每个 Service Broker 对话都有两个端点:对话发起方和目标。 在请求-回复会话中,请求消息从发起方发送到目标,后者返回回复消息。 每当有要处理的消息时,就可以使用 Service Broker 内部激活来运行某个存储过程。 如果传输了许多消息,Service Broker 可以运行该存储过程的多个副本。 本教程介绍如何创建可在目标接收请求消息的存储过程,以及如何将目标配置为使用内部激活运行此存储过程。

本课程指导你执行以下任务:

  • 为目标创建一个服务和队列,并为发起方创建一个服务和队列。

  • 创建请求消息类型和答复消息类型。

  • 创建约定,指定请求消息从发起方传递到目标并且答复消息从目标传递到发起方。

  • 创建一个存储过程,该存储过程接收来自目标队列的请求消息,并向发起方发送答复消息。

  • 更改目标队列以启用存储过程的内部激活。

然后执行基本对话:

  • 启动对话.

  • 从发起方向目标发送一个请求。

  • 然后,Service Broker 激活存储过程。 存储过程在目标处接收请求,并向发起方发送回复。

  • 在发起方处接收答复。

  • 在会话的发起方结束会话。

  • 然后,Service Broker 再次激活存储过程,存储过程结束会话的目标端。

对于在数据库引擎的同一实例中两端的对话,不会跨网络传输消息。 数据库引擎安全性和权限限制对授权原则的访问。 此方案不需要网络加密。

本教程分为以下课程。

Description
第 1 课:创建基本对话对象 创建支持基本 Service Broker 对话所需的消息类型、协定、服务和队列。
第 2 课:创建内部激活过程 创建将从目标队列接收消息的存储过程,然后更改目标队列以指定内部激活。
第 3 课:开始对话并传输消息 通过启动会话并将请求消息从发起方传输到目标来完成基本对话。 内部激活存储过程接收请求消息,并返回回复消息。 然后结束会话的发起方,存储过程结束会话的目标端。
第 4 课:删除对话对象 删除为支持会话而创建的对象。

要求

若要完成此教程,应熟悉 Transact-SQL 语言以及如何在 SQL Server Management Studio 中使用数据库引擎查询编辑器。 必须是示例数据库的 db_ddladmindb_owner 固定数据库角色 AdventureWorks2025 的成员,或者是 sysadmin 固定服务器角色的成员。

您的系统必须安装以下软件: