예제 #1
0
        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));
        }
예제 #2
0
    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()));
    }
예제 #3
0
        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);
                }
            }
        }