创建 Service Broker 应用程序

适用于SQL ServerAzure SQL 托管实例

本节概述了 Service Broker 应用程序的结构,讨论了启动使用 Service Broker 的应用程序的一些最常用的策略以及接收和处理消息的基本步骤。

发起服务的应用程序使用 BEGIN DIALOG 语句指定有关每个终结点上的服务的信息,以及应用程序将用于通信的服务协定。 应用程序使用 SEND 语句将会话的第一条消息发送到目标服务。 应用程序必须准备好从 Service Broker 接收和处理消息,即使协定不允许目标服务返回消息。 起始应用程序通常实现为两个单独的组件。 一个组件用于启动会话,而另一个组件负责处理到达队列中的消息。

用于目标服务的应用程序接收和处理来自起始服务的消息。 另外,该应用程序还必须准备好接收和处理来自 Service Broker 的消息。

应用程序用于处理队列的部分可以以多种不同的方式启动,具体取决于服务的要求。 有关启动使用 Service Broker 的应用程序的详细信息,请参阅 “选择启动策略”。

但是应用程序启动,应用程序将开始事务,并使用 RECEIVE 语句取消消息排队。 应用程序将从消息中提取数据,并对其执行任何必要的处理。 如有必要,应用程序使用 SEND 语句将消息发送到会话的另一端。 随后,应用程序提交事务。 为了提高效率,应用程序可能会在同一事务中处理多个消息。 维护状态的服务通常使用 GET CONVERSATION GROUP 语句锁定会话组、检索会话组的状态,然后处理会话组的多个消息。

会话继续,使用 SEND 语句 RECEIVE 在终结点之间传输消息。 如有必要,对话中的任何一个参与者都可以用于 BEGIN DIALOG 启动与另一个服务的对话以获取其他信息。 例如,正在处理事件通知的应用程序可能会启动与服务的另一个对话,该服务提供人员信息,以便在发送警报之前检索当前联系人信息。

当会话达到其目的时,相应的终结点上的应用程序将使用 END CONVERSATION 语句结束会话。 另一个参与者也接收该 END CONVERSATION 消息并在其一侧发出消息 END CONVERSATION 。 两个参与者发出 END CONVERSATION 消息后,对话将结束。

如果发生错误,会话中的一个参与者可能会通过使用 WITH ERROR 子句结束会话来指示失败。 WITH ERROR使用该子句结束会话,并向会话中的其他参与者发送 Service Broker 错误消息。

如果 Service Broker 检测到错误或会话生存期到期,则 Service Broker 会结束会话并向活动的参与方返回错误消息。 如果 Service Broker 无法建立对话,则唯一的活动参与者是发起的应用程序,并将错误传递到发起服务。 如果一个参与方已经结束会话,则该错误消息将发送给另一个参与方。 否则,错误消息将同时发送给会话的两个参与方。

本部分内容

Article Description
选择启动策略 本文讨论了启动使用 Service Broker 的应用程序的一些最常用的策略。
Service Broker 应用程序大纲 本文介绍了接收和处理消息的基本步骤。