Service Broker 的作用

Service Broker 可帮助开发人员生成异步的松散耦合应用程序,可以在这些应用程序中组合使用独立组件来完成任务。 这些应用程序组件交换包含完成任务所需信息的消息。 本主题介绍 Service Broker 的以下基本情况:

  • 会话
  • 消息排序和协调
  • 事务异步编程
  • 支持松散耦合应用程序
  • Service Broker 组件

会话

Service Broker 是围绕着发送和接收消息的基本功能来设计的。 每个消息都是“会话**”的一个组成部分,会话是一个可靠的、持久的通信渠道。 Service Broker 要求每个消息和会话都必须具有一个特定的类型,以帮助开发人员编写可靠的应用程序。

新的 Transact-SQL 语句使应用程序可以可靠地发送和接收消息。 应用程序向“服务**”发送消息,“服务”是一组相关任务的名称。 应用程序从“队列**”中接收消息,“队列”是一个内部表的视图。

同一任务的消息是同一会话的一部分。 在每个会话中,Service Broker 保证应用程序对每个消息只接收一次,并按照消息的发送顺序来接收消息。 实现某个服务的程序可以关联“会话组**”中该同一服务的相关会话,详细信息请参阅 Service Broker 的优点

基于证书的安全机制有助于保护敏感消息并控制对服务的访问。

理解 Service Broker 的一个方法是将它想像成邮政服务。 若要与远方同事展开会话,您可以通过邮政服务发送信件进行联络,邮政服务会分拣信件并投递。 您和您的同事从邮箱中检索信件、阅读它们、撰写回信并发送新的信件,直到会话结束。 信件传递是“异步”的,也就是您和您的同事同时可以处理其他任务。

两个用户通过邮政服务交换邮件。

在这个与邮政服务的类比中,信件就是消息。 Service Broker 服务就是邮局投递信件的地址。 队列就是在信件投递后用于保存它们的邮箱。 应用程序接收消息、对消息进行操作,然后发送响应。

使用 Service Broker 的程序通过与邮递相类似的方式保持与其他程序之间的会话。

您无需具体了解您的同事何时阅读邮件或回复邮件。 同样,使用 Service Broker 的应用程序不必了解其他服务如何处理消息、如何传递消息或其他应用程序何时处理消息。

消息排序和协调

Service Broker 在处理队列(一种常见的数据库编程技术)时,有两个关键方面不同于传统产品:

  • Service Broker 队列集成在数据库中。
  • 队列对相关消息进行协调和排序。

集成队列意味着常规数据库维护和管理还要包括 Service Broker。 通常,管理员无需进行与 Service Broker 有关的日常维护任务。

Service Broker 框架提供一个用于发送和接收消息的简单 Transact-SQL 接口,并且该接口结合了一套针对消息传递和处理的强保证策略。Service Broker 保证程序对会话中的每条消息只接收一次,其顺序是消息发送的顺序,而不是消息进入队列的顺序。 传统的队列产品提供消息的顺序是消息进入队列的顺序,同时要求应用程序确定消息的顺序和分组。Service Broker 保证两个队列读取器不能同时处理来自同一会话的或同一相关会话组的消息。

起始程序为每个任务启动一个会话,然后向目标服务发送消息。 消息中包含执行任务中特定步骤所需的数据。 目标服务接收该消息。 目标服务的程序处理该消息,然后响应起始服务。 会话继续进行,最终根据开发人员确定的规则结束。

Service Broker 可处理编写消息应用程序中包含的最困难的任务。 这些任务包括协调、可靠的消息传递、锁定和启动队列读取器。 这使得数据库开发人员能够集中精力解决业务问题。

事务异步编程

在 Service Broker 基础结构中,应用程序间的消息传递是“事务**”和“异步**”的。 由于 Service Broker 消息传递是事务性的,因此,如果某个事务回滚,则该事务中的所有 Service Broker 操作都将回滚。 这包括发送和接收操作。 在异步传递中,数据库引擎在应用程序继续运行时处理传递。 为了提高伸缩性,Service Broker 提供了一些机制,当处理队列的程序需要进行一些必要的工作时,这些机制可以自动启动这些程序。 有关详细信息,请参阅 Service Broker Activation

异步编程可以帮助开发人员编写使用队列的应用程序。 很多数据库都包含用作队列的表,其中包含当资源允许时所要完成的工作。 队列允许数据库在有效地使用可用资源时保持对交互用户的响应。Service Broker 提供队列功能以作为数据库引擎的重要部分。

队列功能使应用程序可以在与请求工作的事务不同的另一个事务中执行该工作。Service Broker 扩展了此概念,使应用程序可以在另一个实例或另一台计算机中执行工作。Service Broker 在数据库中提供内置队列和实例间的可靠事务消息传递,这对数据库开发人员很有帮助。

支持松散耦合应用程序

Service Broker 支持松散耦合的应用程序。 松散耦合应用程序由多个相互间独立发送和接收消息的程序组成。 此类应用程序必须包含用于交换消息的相同定义,并且必须为服务间的交互定义相同的总体结构。 但是,应用程序不必同时运行、在 SQL Server 的相同实例中运行或共享实现详细信息。 应用程序不必知道会话中其他参与者的物理位置或实现情况。

Service Broker 组件

Service Broker 有三种类型的组件:

  • 会话组件。 会话组、会话和消息构成 Service Broker 应用程序的运行时结构。 应用程序将消息作为会话的一部分进行交换。 每个会话都是一个会话组的一部分;会话组可以包含多个会话。Service Broker 会话是对话,即正好是两个参与者之间的会话。 有关会话组件的详细信息,请参阅会话体系结构
  • 服务定义组件。 这些组件是设计时组件,用于指定应用程序所用会话的基础结构。 它们定义应用程序的消息类型、应用程序的会话流和应用程序的数据库存储。 有关服务定义组件的详细信息,请参阅服务体系结构
  • 网络和安全组件。 这些组件定义用于交换 SQL Server 实例外部的消息的基础结构。 为了帮助数据库管理员管理更改环境,Service Broker 允许管理员独立于应用程序代码来配置这些组件。 有关网络和安全组件的详细信息,请参阅网络传输与远程安全机制

服务定义组件、网络组件和安全组件是数据库和 SQL Server 实例的元数据的一部分。 会话组、会话和消息是数据库所包含的数据的一部分。

请参阅

概念

Service Broker 伸缩性

其他资源

Service Broker 体系结构
Service Broker Activation
Service Broker 的安全注意事项
Service Broker 教程

帮助和信息

获取 SQL Server 2005 帮助