Share via


Dapr 元件復原能力 (預覽)

復原原則會主動防止、偵測及復原容器應用程式失敗。 在本文中,您將瞭解如何將復原原則套用至使用 Dapr 與不同雲端服務的應用程式,例如狀態存放區、發佈/子訊息代理程式、秘密存放區等等。

您可以透過 Dapr 元件設定下列輸出和輸入作業指示的復原原則,例如重試和逾時:

  • 輸出作業: 從 Dapr Sidecar 呼叫元件,例如:
    • 保存或擷取狀態
    • 發佈訊息
    • 叫用輸出系結
  • 輸入作業: 從 Dapr Sidecar 呼叫容器應用程式,例如:
    • 傳遞訊息時的訂用帳戶
    • 傳遞事件的輸入系結

下列螢幕快照顯示應用程式如何使用重試原則嘗試從失敗的要求復原。

Diagram demonstrating resiliency for container apps with Dapr components.

支持的復原原則

設定復原原則

您可以選擇使用 Bicep、CLI 或 Azure 入口網站 來建立復原原則。

下列復原範例示範所有可用的組態。

resource myPolicyDoc 'Microsoft.App/managedEnvironments/daprComponents/resiliencyPolicies@2023-08-01-preview' = {
  name: 'my-component-resiliency-policies'
  parent: '${componentName}'
  properties: {
    outboundPolicy: {
      timeoutPolicy: {
          responseTimeoutInSeconds: 15
      }
      httpRetryPolicy: {
          maxRetries: 5
          retryBackOff: {
            initialDelayInMilliseconds: 1000
            maxIntervalInMilliseconds: 10000
          }
      } 
    } 
    inboundPolicy: {
      timeoutPolicy: {
        responseTimeoutInSeconds: 15
      }
      httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
      } 
    }
  }
}

重要

套用所有復原原則之後,您必須重新啟動 Dapr 應用程式。

原則規格

逾時

逾時是用來提早終止長時間執行的作業。 逾時原則包含下列屬性。

properties: {
  outbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
  inbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
}
中繼資料 必要 描述 範例
responseTimeoutInSeconds Yes 等候來自 Dapr 元件的回應逾時。 15

重試

httpRetryPolicy定義失敗作業的策略。 重試原則包含下列設定。

properties: {
  outbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  }
  inbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  } 
}
中繼資料 必要 描述 範例
maxRetries Yes 針對失敗的 HTTP-request 執行重試次數上限。 5
retryBackOff Yes 監視要求,並在符合逾時和重試準則時關閉受影響服務的所有流量。 N/A
retryBackOff.initialDelayInMilliseconds Yes 第一次錯誤與第一次重試之間的延遲。 1000
retryBackOff.maxIntervalInMilliseconds Yes 重試之間的延遲上限。 10000

復原記錄

從容器應用程式的 [ 監視] 區段中,選取 [ 記錄]。

Screenshot demonstrating where to find the logs for your container app using Dapr component resiliency.

在 [記錄] 窗格中,撰寫並執行查詢,以透過容器應用程式系統記錄尋找復原功能。 例如,若要尋找是否已載入復原原則:

ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Loading Resiliency configuration:"
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc

按兩下 [ 執行 ] 以執行查詢,並使用指出正在載入原則的記錄訊息來檢視結果。

Screenshot showing resiliency query results based on provided query example for checking if resiliency policy has loaded.

或者,您可以在元件上啟用偵錯,並使用類似下列範例的查詢來尋找實際的復原原則:

ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Resiliency configuration ("
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc

按兩下 [ 執行 ] 以執行查詢,並使用原則組態檢視產生的記錄訊息。

Screenshot showing resiliency query results based on provided query example for finding the actual resiliency policy.

查看使用 Azure Container Apps 內建服務探索服務對服務通訊的復原運作 方式