我在 Azure Function 中使用 Microsoft.Azure.WebJobs.Extensions.ServiceBus 包的 5.2.0 版。根據此處的檔案,新版本支持對失敗的操作進行自動重試。這是我的 host.json:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"clientRetryOptions": {
"mode": "Exponential",
"tryTimeout": "00:02:00",
"delay": "00:00:02.00",
"maxDelay": "00:30:00",
"maxRetries": 10
}
}
}
}
其中 - 除了時間值 - 與檔案中的完全相同。在由 a 觸發的函式中,ServiceBusTrigger我在某些情況下拋出例外。我希望訊息被延遲,如檔案中所述。但它被放回佇列的頭部并立即重試,沒有延遲。我已經為此花了 2 個作業日,以及我在網上找到的混雜的版本、不正確的檔案和示例,我嘗試了各種排列方式,但我就是無法讓它發揮作用。
我只是不再只見樹木不見森林。誰能看到我做錯了什么?
uj5u.com熱心網友回復:
似乎在這里提出并回答了這個問題。似乎重試僅適用于它認為可重試的某些錯誤,即瞬態錯誤。
uj5u.com熱心網友回復:
您正在配置的選項控制功能系結使用的服務總線客戶端的隱式重試行為。當讀取或發布訊息由于被視為暫時的錯誤而失敗時,這些設定將應用于客戶端重試。此流程對您的函式是不可見的,除了可以通過讀取/發布比正常時間更長的時間來完成觀察。
您的函式代碼中的例外不受這些設定的約束。這些型別的例外由函式錯誤處理和重試配置管理。
uj5u.com熱心網友回復:
就像其他答案中已經提到的那樣,這些重試選項僅適用于內部(瞬態)例外。您需要的可以通過新的重試策略(預覽版)來實作:
[FunctionName("EventHubTrigger")]
[ExponentialBackoffRetry(5, "00:00:04", "00:15:00")]
public static async Task Run([EventHubTrigger("myHub", Connection = "EventHubConnection")] EventData[] events, ILogger log)
{
// ...
}
或者,特別是對于 ServiceBus,您可以通過禁用自動完成并利用佇列上的鎖定持續時間屬性來實作類似的行為。可以使用最大傳遞計數來控制重試次數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437689.html
標籤:C# 天蓝色 功能 天蓝色服务总线 天蓝色服务总线主题
上一篇:記錄不輸出任何東西
