2017-10-17 10 views
2

코스모스 db (documentdb)에 대한 재시도/백 오프 전략을 어떻게 구현하는 것이 가장 좋은지 알고 싶습니다. 내가 그렇게처럼 connectionpolicy에서 변경할 수있는 SDK에 내장 된 몇 가지 기본 재시도 메커니즘이 있음을 이해 :Cosmos DB에서 정책 다시 시도

RetryOptions = new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 3, MaxRetryWaitTimeInSeconds = 60 } 

그러나, 나는 확실하지 않다 어떻게 예외 관리 작업을 수행하는 방법에 영향을 것을.

은 현재 내가 뭐하는 거지 다음

GetAsync<T>(Uri, Id) { 

    try { 

     ResourceResponse<Document> response = await client.ReadDocumentAsync(URiFactory.CreateDocumentUri(uri), new RequestOptions { PartitionKey = new PartitonKey(convert.ToInt64(id)) }).ConfigureAwait(false); 

    } 
    catch(DocumentClientException ex) { 
     if(ex.StatusCode == (HttpStatusCode)TooManyRequests) { 
      await Task.Run(async() => 
      { 
       await Task.Delay(ex.RetryAfter); 
       return await GetAsync<T>(Uri, Id).ConfigureAwait(false); 
      } 
     } 
    } 
} 

나는이 재 시도를 어떻게해야합니까? 예외를 잡으면 기본 재시도가 중지됩니까? 또한 기본 재시도 시도는 무엇입니까? 즉 429입니까? 그렇다면 수동으로 오류 코드 449를 처리해야합니까?

도움을 주시면 대단히 감사하겠습니다.

답변

0

맞춤 RetryOptions은 조절판 (429 오류 코드)을 처리하는 데만 사용됩니다. 자세한 내용은 https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#429을 참조하십시오.

예외적 인 부분 : API는 모든 재 시도가 고갈 된 후에 만 ​​유예됩니다. 기본적

는 상태 코드 (429)와 DocumentClientException 요청 요청 레이트 이상 계속 작동하는 경우 30 초의 누적 대기 시간 후에 반환된다. 이는 현재 재시도 횟수가 최대 재시도 횟수보다 작 으면 기본값 인 9 또는 사용자 정의 값이더라도 발생합니다.