Service Broker 体系结构

 

  1. 会话体系结构
  2. 所有 Service Broker 应用程序都通过“会话”(即可靠的、长时间运行的异步消息交换)进行通信。Service Broker 在会话中使用以下对象。

    对象

    定义

    消息

    消息是服务间交换的数据。 每个消息都属于一个会话,并具有特定的消息类型。

    对话会话

    对话是两个 Service Broker 服务间的双向会话。 对话为 Service Broker 提供了一次顺序 (EOIO) 消息传递功能。 每个对话属于一个会话组,并遵循特定的约定。

    会话组

    会话组标识共同完成同一项任务的多个会话。Service Broker 使用会话组来管理消息锁定,这可以帮助应用程序开发人员管理并发。 应用程序开发人员还利用会话组协助管理状态。

  3. 服务体系结构
    • 消息类型 — 定义应用程序间交换的消息的名称。 还可以选择是否验证消息。
    • 约定 — 指定给定会话中的消息方向和消息类型。
    • 队列 — 存储消息。 这种存储机制使服务之间可以进行异步通信。Service Broker 队列还有其他优点,比如自动锁定同一个会话组中的消息。
    • “服务”是可寻址的会话端点。Service Broker 消息从一个服务发送到另一个服务。 服务指定一个队列来保存消息,还指定一些约定,约定指明该服务可作为“目标”。 约定向服务提供一组定义完善的消息类型。
  4. 在设计时,Service Broker 应用程序指定以下对象:

    Service Broker 应用程序使用上述列表中的 SQL Server 对象进行会话。 SQL Server 中任何可运行 Transact-SQL 语句的程序均可使用 Service Broker。 应用程序可以是以 Transact-SQL 编写的或以符合 CLR 的语言编写的存储过程,也可以是连接到 SQL Server 实例的外部程序。

    以下关系图说明 Service Broker 服务:

    如图所示,ProcessExpenses 约定指定三种消息类型:SubmitExpenseAcceptDenyExpenseReimbursementIssued。 该约定列出执行退款任务的会话所需的消息类型。 ProcessExpenses 约定控制 ProcessExpense 服务和发起与 ProcessExpense 服务间会话的任何服务之间的所有会话。 ProcessExpense 服务将传入消息和传出消息存储在 ExpenseQueue 队列中。 ExpenseProcessing 存储过程从此队列接收消息并处理消息,在需要答复的情况下再将消息发回队列以路由到相应的 Broker。

  5. 网络传输与远程安全机制
  6. 主题

    说明

    远程服务绑定

    说明如何设置 Broker 用于建立对话安全模式的证书。 对话安全模式为到特定服务的会话提供端到端的加密和远程授权。

    路由

    说明如何指定服务及包含服务的数据库的位置。 Service Broker 传递消息时需要路由。 默认情况下,每个数据库都包含一个路由,该路由指定未定义其他路由的服务将在当前实例中传递。

    Service Broker 端点

    说明如何配置 SQL Server 以通过 TCP/IP 连接发送和

  7. 生成使用 Service Broker 的应用程序
    • 用户通过用户界面提交退款申请。应用程序运行 ExpenseSubmission 存储过程,此过程创建一条 SubmitExpense 消息。SubmitExpense 服务启动与 ProcessExpense 服务的会话,然后将 SubmitExpense 消息发送给 ProcessExpense 服务。
    • Service Broker 接收 ProcessExpense 服务的 SubmitExpense 消息,并将消息放到 ExpenseQueue 队列中。ExpenseQueue 队列激活 ProcessExpense 存储过程,此过程将 SubmitExpense 消息从队列中取出并进行处理。然后,ProcessExpense 存储过程创建一条 AcceptDenyExpense 消息,并将此消息发送到 SubmitExpense 服务。如果支出请求被拒绝,则 ProcessExpense 存储过程将结束会话。
    • Service Broker 将 SubmitExpense 服务的 AcceptDenyExpense 消息放到该服务的队列中。如果 ProcessExpense 过程结束了会话,则 Service Broker 将一条 EndDialog 消息放到 Expenses 队列中。该队列激活 ExpenseSubmission 存储过程,此过程将 AcceptDenyExpense 消息从队列中取出并进行处理。如果 ExpenseSubmission 存储过程在队列中找到 EndDialog 消息,则此过程就结束会话。
    • 如果支出请求被接受,则 ProcessExpense 服务创建并发送一条 ReimbursementIssued 消息,确认付款已发出,然后结束会话。Service Broker 将这些消息放到该服务的队列中。此队列激活 ExpenseSubmission 过程,此过程对 ReimbursementIssued 消息进行处理。然后此过程对 EndDialog 消息进行处理,并结束会话。
  8. 如图所示,首先创建 SubmitExpenseAcceptDenyExpenseReimbursementIssued 消息类型。然后基于这些消息类型创建 ProcessExpenses 约定,它提供一个架构,使会话能够完成退款任务。ProcessExpenses 约定控制 ProcessExpense 服务与 SubmitExpense 服务间的所有会话。ProcessExpenses 约定及其使用的消息类型必须同时存在于特定的数据库中,这些数据库是与拥有基于此约定的会话的所有服务相关的数据库。

    Service Broker 在 SubmitExpense 服务的队列中存储发送给该服务的消息。ExpenseSubmission 存储过程接收来自此队列的消息、处理这些消息,如果需要答复的话,则将消息发送到另一服务。

    Service Broker 在 ProcessExpense 服务的队列中存储发送给该服务的消息。ExpenseProcessing 存储过程接收来自此队列的消息、处理这些消息,如果需要答复的话,则将消息发送到另一服务。

    这两个服务间的会话将按如下方式构造:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 2005 的一个主要成就是可以实现可靠、可扩展且功能完善的数据库应用程序。与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重要的业务逻辑与存储过程合并,而 T-SQLXML 中的新增功能扩展了数据操作的可用范围以及开发人员可用的存储功能。另一个重要功能是 SQL Server Service Broker,它为数据库应用程序增加了可靠、可扩展、分布式异步功能。 为什么要编写异步排队操作? 在开发 SQL Server 2005 时,我们与成功开发过大型可扩展数据库应用程序的人员进行了交谈。结果发现他们几乎所有的应用程序中都有一个或多个操作是以异步排队方式执行的。股票交易系统中的结算活动是排队的,这样可以在后台进行结算,在前端处理其他交易。订单输入系统中的发货信息放在一个排队中,稍后将由另一台服务器(通常位于其他位置)上运行的发货系统读取。旅行预订系统在客户填写完路线后再进行实际的预订,并在预订完成后发送确认电子邮件。在所有这些示例中,许多工作都是通过异步方式完成的,从而提高了系统的响应速度,因此用户无须等待工作完成就可以收到响应。 在大多数大型系统中,经过仔细分析后都可以发现,许多处理都可以通过异步方式完成。虽然应用程序中的排队任务无须立即完成,但系统必须确保这些任务能够可靠地完成。Service Broker 使异步排队任务的执行可靠并且易于实现。 使应用程序中的部分任务异步执行的另一个优势是这些任务的处理工作可以在资源可用时完成。如果订单输入系统中的发货任务可以从队列中执行,发货系统就无需具有处理峰值订单负载的能力。在许多订单输入系统中,峰值订单率可能是平均订单率的两倍或三倍。由于订单输入系统必须具有处理峰值负载的能力,因此大量处理能力在很大一部分时间内都处于闲置状态。如果在出现峰值时对异步任务进行排队并在空闲时执行,将显著提高系统的利用率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值