錯誤處理簡介
在 Application Integration 中,測試及發布整合項目時,或是在執行整合項目期間,可能會發生錯誤。這些錯誤可能是用戶端和伺服器端問題所致,大致可分為以下幾類:
- 永久錯誤: 所有用戶端錯誤 (例如驗證失敗、資料驗證錯誤) 都視為永久錯誤。永久性錯誤會導致工作永久失敗。
- 暫時性錯誤: 所有伺服器端錯誤,例如 HTTP 503 (服務無法使用)、HTTP 400 (要求無效),都視為暫時性錯誤。暫時性錯誤會導致工作暫時失敗。
錯誤訊息會顯示在下列位置:
- 執行記錄頁面:顯示執行整合時發生的錯誤。每次執行整合作業都會產生不同的記錄項目。如要瞭解執行記錄頁面,請參閱「執行記錄」。
- 整合編輯器頁面:顯示發布整合功能時發生的錯誤。錯誤會顯示在整合編輯器頁面底部。如要瞭解整合服務編輯器頁面,請參閱「整合服務編輯器」。
如要瞭解可能遇到的錯誤代碼清單,請參閱「錯誤代碼」。
錯誤處理方法
應用程式整合支援下列錯誤處理方法,可拋出、擷取、重試及自訂整合中發生的錯誤:
- 錯誤處理策略:工作錯誤處理策略會指定工作因暫時性錯誤而失敗時,應採取的動作。您可以為同步和非同步執行模式指定不同的錯誤處理策略。
- 錯誤擷取器:錯誤擷取器可定義自訂方式,處理整合中已識別的觸發條件、工作或邊緣條件失敗情形。您可以在單一整合中定義一或多個錯誤擷取器,以處理工作錯誤和/或執行失敗。您可以使用名為「錯誤擷取器觸發條件」的觸發條件,叫用每個錯誤擷取器,執行為處理錯誤而自訂的一組整合工作。
您可以針對整合執行作業的同步和非同步模式,使用錯誤處理方法:
- 同步執行:在同步模式中,整合作業執行完畢後,很快就會提供執行結果。如果您希望整合作業執行完畢後立即取得結果,同步模式就非常實用。觸發條件會以同步模式執行整合,包括:
-
非同步執行作業:非同步執行作業會使用「啟動後即忘」模型。如果整合作業可能需要很長時間才能完成,或執行整合作業後不需要立即取得結果,非同步模式就非常實用。以非同步模式執行整合的觸發條件包括:
- 所有非同步執行作業都會以非同步模式執行。常見的非同步模式包括但不限於:
- 從暫停或核准工作恢復執行的作業,也會以非同步模式執行,即使初始執行作業是以同步模式執行也一樣。
最佳做法
在整合中同時使用錯誤處理策略和錯誤擷取器。如果發生任何錯誤,整合功能會遵循錯誤處理章節中定義的策略。用盡設定的錯誤處理策略後,系統會觸發錯誤擷取器邏輯。使用系統變數擷取錯誤代碼和錯誤訊息的值,並傳送至錯誤擷取流程。
範例
假設您有建立訂單的整合流程,系統會在 MySQL 適用的 Cloud SQL 中建立新訂單。這個流程會使用連接器工作 (本例為「建立訂單」) 連線至 MySQL 適用的 Cloud SQL。如果資料庫發生中斷情形,連接器工作會在將新訂單插入資料庫時擲回錯誤。最佳做法是在整合中同時使用錯誤處理策略和錯誤擷取器。
如要新增錯誤處理策略,請在整合設計工具中按一下連接器工作,開啟工作設定窗格。下圖顯示為「建立訂單」連接器工作設定的錯誤處理策略:
如要新增錯誤處理策略,請在整合設計工具中按一下「Call REST Endpoint」(呼叫 REST 端點) 任務,開啟任務設定窗格。下圖顯示為「呼叫 REST 端點」工作設定的錯誤處理策略:
如要新增錯誤擷取器,請在整合設計工具中按一下「Call REST Endpoint」(呼叫 REST 端點) 任務,開啟任務設定窗格。在「Error Catcher」部分,新增錯誤擷取器詳細資料。下圖顯示為「Call REST Endpoint」(呼叫 REST 端點) 任務設定的錯誤擷取器:
錯誤代碼
下表說明您可能會遇到的錯誤,以及造成這些錯誤的原因。Application Integration 使用 google.rpc.Code 中定義的標準錯誤代碼。
如要瞭解 Application Integration 錯誤和不同的錯誤處理策略,請參閱「錯誤和錯誤處理」。
| 標準例外狀況類型 | 標準代碼 | HTTP 代碼 | 說明 |
|---|---|---|---|
| FailedPreconditionException | FAILED_PRECONDITION |
400 | 無法在目前的系統狀態下執行要求。 |
| BadRequestException | INVALID_ARGUMENT |
400 | 用戶端指定的引數無效。請檢查錯誤訊息和錯誤詳細資料以瞭解詳情。 |
| UnauthenticatedException | UNAUTHENTICATED |
401 | OAuth 權杖遺漏、無效或過期,因此無法驗證要求。 |
| ForbiddenException | PERMISSION_DENIED |
403 | 用戶端權限不足。這可能是因為 OAuth 憑證的範圍不正確、用戶端沒有必要權限,或 API 尚未啟用。 |
| NotFoundException | NOT_FOUND |
404 | 找不到指定的資源。 |
| AlreadyExistsException | ALREADY_EXISTS |
409 | 用戶端嘗試建立的資源已存在。 |
| InternalError | INTERNAL |
500 | 發生內部伺服器錯誤。通常是伺服器的錯誤。如果任何工作或觸發條件設定錯誤,就可能發生這種情況。 |
| UnimplementedException | UNIMPLEMENTED |
501 | 伺服器未執行 API 方法。 |
| ServiceUnavailableException | UNAVAILABLE |
503 | 服務無法使用,通常是因伺服器停止運作所致。 |
| AbortedException | ABORTED |
409 | 回覆大小超過上限。 |