public async Task <IActionResult> Get(int id) { var httpClient = GetHttpClient(); string requestEndpoint = $"samples/timeout-policy/inventory/{id}"; var response = await _httpFallbackPolicy .ExecuteAsync(() => _httpRetryPolicy .ExecuteAsync(() => _httpTimeoutPolicy .ExecuteAsync(token => httpClient.GetAsync(requestEndpoint, token), CancellationToken.None))); if (response.IsSuccessStatusCode) { var itemsInStock = JsonConvert.DeserializeObject <int>(await response.Content.ReadAsStringAsync()); return(Ok(itemsInStock)); } if (response.Content != null) { return(StatusCode((int)response.StatusCode, response.Content.ReadAsStringAsync())); } return(StatusCode((int)response.StatusCode)); }
public async Task <IActionResult> Get(int id) { _httpClient = GetHttpClient(); string url = $"inventory/{id}"; // HttpResponseMessage res = await _httpRetryPolicy.ExecuteAsync(() => _httpClient.GetAsync(url)); //Chaining Policies Fallback With Retry // HttpResponseMessage res = await _fallbackPolicy // .ExecuteAsync( // () => _httpRetryPolicy.ExecuteAsync(() => _httpClient.GetAsync(url)) // ); //Chaining Policies Fallback With Retry and Timeout HttpResponseMessage res = await _fallbackPolicy .ExecuteAsync(() => _httpRetryPolicy .ExecuteAsync(() => _timeoutPolicy .ExecuteAsync(() => _httpClient.GetAsync(url)))); if (res.IsSuccessStatusCode) { var body = JsonConvert.DeserializeObject <int>(await res.Content.ReadAsStringAsync()); return(Ok(body)); } return(StatusCode((int)res.StatusCode, res.Content.ReadAsStringAsync())); }
public async Task <IActionResult> Index() { HttpClient client = new HttpClient(); var result = await _fallbackPolicy.ExecuteAsync(() => _retryPolicy.ExecuteAsync(() => _circuitBreaker.ExecuteAsync(() => client.GetAsync(_BaseAddress)))); var str = await result.Content.ReadAsStringAsync(); var obj = JsonConvert.DeserializeObject <ClientMessage>(str); return(Ok(obj)); }
public async Task <ActionResult <string> > Get() { using (_summary.WithLabels("/circuitbreaker").NewTimer()) { using (var client = _httpClientFactory.CreateClient("faultservice")) { string response = await fallbackForCircuit.ExecuteAsync(() => client.GetStringAsync("/greeting")); // only sleep if not fallback if (!response.Equals("Please try again later [Fallback for broken circuit]")) { Console.WriteLine(response); System.Threading.Thread.Sleep(5000); } return(response); } } }