日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

錯誤處理

在使用SDK訪問日志服務(wù)端時,可能會出現(xiàn)網(wǎng)絡(luò)中斷、網(wǎng)絡(luò)延遲導(dǎo)致的請求失敗。本文介紹SDK請求失敗時的錯誤處理邏輯。

錯誤類型及處理原則

SDK可能出現(xiàn)的異常錯誤可以分成如下幾類:

  • 由日志服務(wù)端返回的錯誤。這類錯誤由日志服務(wù)端返回并由SDK處理。關(guān)于這類錯誤的詳細信息可以參見具體的API接口說明、API錯誤碼。關(guān)于錯誤碼的更多信息,請參見錯誤碼

  • 由SDK在向服務(wù)端發(fā)出請求時出現(xiàn)的網(wǎng)絡(luò)錯誤。這類錯誤包括網(wǎng)絡(luò)連接不通,服務(wù)端返回超時等。

  • 由SDK自身產(chǎn)生的、與平臺及語言相關(guān)的錯誤,如內(nèi)存溢出等。

目前,各個語言SDK的實現(xiàn)都采取拋出異常的方式處理錯誤。具體原則如下:

  • 由日志服務(wù)端返回的錯誤或者由SDK在向服務(wù)端發(fā)出請求時出現(xiàn)的網(wǎng)絡(luò)錯誤將會被SDK處理并包裝在統(tǒng)一的LogException類拋出給用戶處理。

  • 由SDK自身產(chǎn)生的、與平臺及語言相關(guān)的錯誤不會被SDK處理,而是直接拋出平臺及語言的Native Exception類給用戶處理。

LogException

LogException類是SDK定義的、用于處理日志服務(wù)自身邏輯錯誤的異常類。它繼承自各個語言的異常基類,提供如下異常信息:

  • 錯誤代碼(Error Code):標示錯誤類型。如果是來自服務(wù)端的返回錯誤,則這個錯誤代碼與API返回的錯誤代碼一致。如果是SDK網(wǎng)絡(luò)請求錯誤,則其錯誤代碼為RequestError 。具體請參見各個語言的完整API參考。

  • 錯誤消息(Error Message):標示錯誤消息。如果是來自服務(wù)端的響應(yīng)錯誤,則這個錯誤消息與API返回的錯誤消息一致。如果是SDK網(wǎng)絡(luò)請求錯誤,則其錯誤消息為request is failed.。具體請參見各個語言的完整API參考。

  • 錯誤請求ID(Request Id):標示當前錯誤對應(yīng)于服務(wù)端的請求ID。該ID只有在服務(wù)端返回錯誤消息時有效,否則為空字符串。用戶可以在遇到錯誤請求時記下該請求ID并提供給日志服務(wù)團隊進行問題追蹤和定位。

請求失敗與重試

在使用SDK訪問日志服務(wù)端時,有可能會因為網(wǎng)絡(luò)臨時中斷、傳輸延時過程、服務(wù)端處理過慢等一系列原因?qū)е抡埱笫 D壳埃@類錯誤都直接以異常拋出,日志服務(wù)內(nèi)部并未對此做任何重試邏輯。所以,您在使用SDK時需要自己定義相應(yīng)的處理邏輯(重試請求或者直接報錯等)。

示例

假設(shè)您需要訪問華東1(杭州)地域下名字為big-game的Project,且在出現(xiàn)網(wǎng)絡(luò)異常時主動重試指定次數(shù)。各語言的代碼片段如下:

// 其他代碼。
// 本示例從環(huán)境變量中獲取AccessKey ID和AccessKey Secret。
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");   
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); 
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
/*
 * 構(gòu)建一個Client。
 */
Client client = new Client(accessId, accessKey, endpoint);
ListLogStoresRequest lsRequest = new ListLogStoresRequest(project);
for (int i = 0; i < max_retries; i++)
{
    try
    {
        ListLogStoresResponse res = client.ListLogStores(lsRequest);
        //處理返回的Response。
        break;
    }
    catch(LogException e)
    {
        if (e.GetErrorCode() == "RequestError")
        {
            if ( i == max_retries - 1)
            {
                System.out.println("request is still failed after all retries.");
                break;
            }
            else
                System.out.println("request error happens, retry it!");
        }
        else
        {
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            System.out.println("error requestId :" + e.GetRequestId());
            break;
        }
    }
    catch(Exception ex)
    {
        System.out.println("unrecoverable exception when listing logstores.");
        break;
    }
}
// 其他代碼。
// 其他代碼。
// 本示例從環(huán)境變量中獲取AccessKey ID和AccessKey Secret。
String accessId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");     
String accessKey = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");    
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
// 創(chuàng)建一個Client。
SLSClient client = new SLSClient(endpoint, accessId, accessKey);
ListLogstoresRequest request = new ListLogstoresRequest();
request.Project = project;
for (int i = 0; i < max_retries; i++)
{
    try
    {
        ListLogstoresResponse response = client.ListLogstores(request);
        //處理返回的Response。
        break;
    }
    catch(LogException e)
    {
        if (e.errorCode == "SLSRequestError")
        {
            if ( i == max_retries - 1)
            {
                Console.Writeline(“request is still failed after all retries.”);
                break;
            }
            else
            {
                Console.Writeline("request error happens, retry it!");
            }
        }
        else
        {
            Console.Writeline("error code :" + e.errorCode);
            Console.Writeline("error message :" + e.Message);
            Console.Writeline("error requestId :" + e.RequestId);
            break;
        }
    }
    catch(Exception ex)
    {
        Console.Writeline("unrecoverable exception when listing logstores.");
        break;
    }
}
// 其他代碼。
<?php
// 其他代碼。
$endpoint = 'cn-hangzhou.sls.aliyuncs.com';
// 本示例從環(huán)境變量中獲取AccessKey ID和AccessKey Secret。
$accessId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'); 
$accessKey = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'); 
$maxRetries = 3;
// 構(gòu)建一個Client。
$client = new Aliyun_Sls_Client($endpoint, $accessId, $accessKey);
$project = 'big-game';
$request = new Aliyun_Sls_Models_ListLogstoresRequest($project);
for($i = 0; $i < $maxRetries; ++$i)
{
    try
    {
        $response = $client->ListLogstores($request);
        // 處理返回的Response。
        break;
    }
    catch (Aliyun_Sls_Exception $e)
    {
        if ($e->getErrorCode()=='RequestError')
        {
            if ($i+1 == $maxRetries)
            {
                echo "error code :" . $e->getErrorCode() . PHP_EOL;
                echo "error message :" . $e->getErrorMessage() . PHP_EOL;
                break;
            }
            echo 'request error happens, retry it!' . PHP_EOL;
        }
        else
        {
            echo "error code :" . $e->getErrorCode() . PHP_EOL;
            echo "error message :" . $e->getErrorMessage() . PHP_EOL;
            echo "error requestId :" . $e->getRequestId() . PHP_EOL;
            break;
        }
    }
    catch (Exception $ex)
    {
        echo 'unrecoverable exception when listing logstores.' . PHP_EOL;
        var_dump($ex);
        break;
    }
}
// 其他代碼。
from aliyun.log import LogClient, ListLogstoresRequest, LogException;

# 其他代碼。
from aliyun.log.logclient import xrange

endpoint = 'cn-hangzhou.log.aliyuncs.com'
# 本示例從環(huán)境變量中獲取AccessKey ID和AccessKey Secret。
accessId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey =  os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
maxRetries = 3
# 構(gòu)建一個Client。
client = LogClient(endpoint, accessId, accessKey)
project = 'big-game'
lsRequest = ListLogstoresRequest(project)
for i in xrange(maxRetries):
    try:
        res = client.ListLogstores(lsRequest)
        # 處理返回的Response。
        break
    except LogException as e:
        if e.get_error_code() == "RequestError":
            if i+1 == maxRetries:
                print("error code :" + e.get_error_code())
                print("error message :" + e.get_error_message())
                break
            else:
                print("request error happens, retry it!")
        else:
            print("error code :" + e.get_error_code())
            print("error message :" + e.get_error_message())
            print("error requestId :" + e.get_request_id())
            break
    except Exception as ex:
        print("unrecoverable exception when listing logstores.")
        break
# 其他代碼。