溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ADO.NET的彈性連接控制[ADO.NET idle connection resiliency]

發(fā)布時(shí)間:2020-07-03 01:19:14 來源:網(wǎng)絡(luò) 閱讀:608 作者:張善友 欄目:編程語言

ADO.NET連接SQL Server有時(shí)候聯(lián)機(jī)會(huì)無故的中斷 (例如閑置過久或是交易時(shí)間太長等因素),這時(shí)又要重新連接,在.NET Framework 4.5之前,這件事情要由開發(fā)人員自己依照ADO.NET的SqlException來判斷并自行重試,重試的算法也要由開發(fā)人員來自定義,所以SQL Database的CAT (Customer Advisory Team) 開發(fā)了Transient Fault Framework給Windows Azure的開發(fā)人員使用,而.NET Framework 4.5.1則正式將它納入ADO.NET的核心程序代碼中,能夠斷開會(huì)話狀態(tài)并在適當(dāng)?shù)臅r(shí)候恢復(fù)會(huì)話,很多場(chǎng)景都會(huì)收益于這個(gè)功能.

ADO.NET Idle Connection Resiliency這個(gè)功能被包裝在Entity Framework 6中,在DbConfiguration設(shè)定DbExecutionStrategy對(duì)象,Entity Framework 6內(nèi)建了四種不同的DbExecutionStrategy[http://msdn.microsoft.com/pt-BR/data/dn456835],分別是:

說明

DefaultExecutionStrategy

執(zhí)行時(shí)不包含重試策略,這會(huì)自動(dòng)用于SQL Server以外的數(shù)據(jù)庫。

DefaultSqlExecutionStrategy

執(zhí)行時(shí)不包含重試策略,但是它會(huì)包裝例外狀況,由使用者決定是否要啟用Connection Resiliency。

DbExecutionStrategy

這個(gè)對(duì)象是所有執(zhí)行策略的基礎(chǔ)類別,它包裝了指數(shù)式重試原則 (exponential retry policy) 算法,并且由實(shí)作來決定要如何使用這個(gè)算法,以及重試的次數(shù)等。

SqlAzureExecutionStrategy

專為SQL Azure Database設(shè)計(jì)的重試策略,會(huì)依照已知的可能瞬斷問題進(jìn)行自動(dòng)的重試處理。

上文提到的 Transient Fault Framework 其實(shí)Enterprise Library的一個(gè)模塊。這個(gè)框架考慮到了處理所有可能的瞬態(tài)錯(cuò)誤的需求,在內(nèi)部實(shí)現(xiàn)了一個(gè)“Retry Policy”來確保只處理需要的錯(cuò)誤。在客戶進(jìn)入重試狀態(tài)前會(huì)使用策略驗(yàn)證這個(gè)異常是否屬于瞬態(tài)錯(cuò)誤。

  • 提供了一個(gè)可擴(kuò)展的Retry邏輯處理瞬態(tài)錯(cuò)誤,不僅限于SQL Server。
  • 支持一系列的重試方案(固定周期,漸進(jìn)周期,隨機(jī)指數(shù)退避)
  • 支持SQL 連接和SQL命令使用不同的Retry策略。
  • SqlConnectionSqlCommand對(duì)象提供了擴(kuò)展方法來實(shí)現(xiàn)Retry操作
  • 支持Retry后的回調(diào),通知用戶代碼是否發(fā)生了Retry情況
  • 支持快速重試模式,當(dāng)?shù)谝淮伟l(fā)生進(jìn)行Retry時(shí)會(huì)立即嘗試而沒有延遲
  • 允許在應(yīng)用程序配置文件中定義Retry策略
  • 支持同步和異步請(qǐng)求

下面是幾個(gè)類似的項(xiàng)目:

  • SQL Fault Retry Provider提供了一個(gè)如何創(chuàng)建高可用性應(yīng)用程序的案例,當(dāng)然特指在SQL Mirroring環(huán)境下。并且提供了一個(gè)可以進(jìn)行重試操作的 Data Provider.
  • Endjin Retry Framework:提供了一下TPL的 重試框架
  • Polly: 提供了一個(gè).NET 3.5/4.0/4.5 下都可用的重試庫
  • 通過nuget上 查詢r(jià)etry可以查到很多相關(guān)的項(xiàng)目 https://www.nuget.org/packages?q=retry 

 

譯文:SQL Azure客戶端-瞬態(tài)錯(cuò)誤處理最佳實(shí)踐

基于Enterprise Library 6 的AOP實(shí)現(xiàn)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI