创建 Service Broker 应用程序

本节概述了 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 无法建立会话,则唯一的活动参与方是起始应用程序,并且该错误消息将发送给起始服务。如果一个参与方已经结束会话,则该错误消息将发送给另一个参与方。否则,错误消息将同时发送给会话的两个参与方。

本节涉及的主题