凯发真人娱乐

ado.net的弹性连接控制[ado.net idle connection resiliency] -凯发真人娱乐

2023-10-15,

ado.net连接sql server有时候联机会无故的中断 (例如闲置过久或是交易时间太长等因素),这时又要重新连接,在.net framework 4.5之前,这件事情要由开发人员自己依照ado.net的sqlexception来判断并自行重试,重试的算法也要由开发人员来自定义,所以sql database的cat (customer advisory team) 开发了transient fault framework给windows azure的开发人员使用,而.net framework 4.5.1则正式将它纳入ado.net的核心程序代码中,能够断开会话状态并在适当的时候恢复会话,很多场景都会收益于这个功能.

ado.net idle connection resiliency这个功能被包装在entity framework 6中,在dbconfiguration设定dbexecutionstrategy对象,entity framework 6内建了四种不同的dbexecutionstrategy[http://msdn.microsoft.com/pt-br/data/dn456835],分别是:

说明

defaultexecutionstrategy

执行时不包含重试策略,这会自动用于sql server以外的数据库。

defaultsqlexecutionstrategy

执行时不包含重试策略,但是它会包装例外状况,由使用者决定是否要启用connection resiliency。

dbexecutionstrategy

这个对象是所有执行策略的基础类别,它包装了指数式重试原则 (exponential retry policy) 算法,并且由实作来决定要如何使用这个算法,以及重试的次数等。

sqlazureexecutionstrategy

专为sql azure database设计的重试策略,会依照已知的可能瞬断问题进行自动的重试处理。

使用 idbconnectionstrategy 可以配置重试次数。 ef 中包含的 sql server 提供程序用来指定 default:sqlserver­executionstrategy,它会显示错误消息告知调整瞬态连接引发异常的策略。 另外一个策略 sqlazureexecutionstrategy 通过微调可以连接 windows azure sql 数据库。

最简单的策略指定方法是使用新的 dbconfiguration 类,使用该类可以很容易配置特定数据库提供程序的行为。 以下命令可以让 ef 针对 sqlclient 使用 sqlazureexecutionstrategy:


              setexecutionstrategy (sqlproviderservices.providerinvariantname,   () => new sqlazureexecutionstrategy());        

不仅连接策略可以配置,而且您还可以自己创建策略并根据需要通过编程暂停使用它们。

上文提到的 transient fault framework 其实enterprise library的一个模块。这个框架考虑到了处理所有可能的瞬态错误的需求,在内部实现了一个“retry policy”来确保只处理需要的错误。在客户进入重试状态前会使用策略验证这个异常是否属于瞬态错误。

提供了一个可扩展的retry逻辑处理瞬态错误,不仅限于sql server。
支持一系列的重试方案(固定周期,渐进周期,随机指数退避)
支持sql 连接和sql命令使用不同的retry策略。
sqlconnectionsqlcommand对象提供了扩展方法来实现retry操作
支持retry后的回调,通知用户代码是否发生了retry情况
支持快速重试模式,当第一次发生进行retry时会立即尝试而没有延迟
允许在应用程序配置文件中定义retry策略
支持同步和异步请求

下面是几个类似的项目:

sql fault retry provider提供了一个如何创建高可用性应用程序的案例,当然特指在sql mirroring环境下。并且提供了一个可以进行重试操作的 data provider.
endjin retry framework:提供了一下tpl的 重试框架
polly: 提供了一个.net 3.5/4.0/4.5 下都可用的重试库
通过nuget上 查询retry可以查到很多相关的项目 https://www.nuget.org/packages?q=retry 

 

译文:sql azure客户端-瞬态错误处理最佳实践

基于enterprise library 6 的aop实现

ado.net的弹性连接控制[ado.net idle connection resiliency]的相关教程结束。

网站地图