Skip to content

Commit aa8e943

Browse files
committed
Added ExecutionKey into PolicyWrap and remove COncurrentDictioanry
1 parent 44ac659 commit aa8e943

2 files changed

Lines changed: 10 additions & 35 deletions

File tree

src/BuildingBlocks/Resilience/Resilience.Http/ResilientHttpClient.cs

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using Polly;
44
using Polly.Wrap;
55
using System;
6-
using System.Collections.Concurrent;
76
using System.Collections.Generic;
87
using System.Linq;
98
using System.Net;
@@ -20,18 +19,15 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
2019
/// </summary>
2120
public class ResilientHttpClient : IHttpClient
2221
{
23-
private HttpClient _client;
24-
private readonly ConcurrentDictionary<string, PolicyWrap> _policiesPerOrigin;
25-
private ILogger<ResilientHttpClient> _logger;
26-
private readonly Func<string, IEnumerable<Policy>> _policyCreator;
22+
private readonly HttpClient _client;
23+
private readonly ILogger<ResilientHttpClient> _logger;
24+
private PolicyWrap _policyWrap;
2725

28-
29-
public ResilientHttpClient(Func<string, IEnumerable<Policy>> policyCreator, ILogger<ResilientHttpClient> logger)
26+
public ResilientHttpClient(IEnumerable<Policy> policies, ILogger<ResilientHttpClient> logger)
3027
{
3128
_client = new HttpClient();
3229
_logger = logger;
33-
_policiesPerOrigin = new ConcurrentDictionary<string, PolicyWrap>();
34-
_policyCreator = policyCreator;
30+
_policyWrap = Policy.Wrap(policies.ToArray());
3531
}
3632

3733

@@ -128,36 +124,15 @@ private Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string ur
128124
}
129125

130126
private Task<T> HttpInvoker<T>(string origin, Func<Task<T>> action)
131-
{
132-
var policyWrapper = GetPolicyForOrigin(origin);
133-
134-
if (policyWrapper != null)
135-
{
136-
// Executes the action applying all
137-
// the policies defined in the wrapper
138-
return policyWrapper.ExecuteAsync(() => action());
139-
}
140-
else
141-
{
142-
throw new InvalidOperationException($"PolicyWrapper can't be created for origin {origin}");
143-
}
144-
}
145-
146-
private PolicyWrap GetPolicyForOrigin(string origin)
147127
{
148128
var normalizedOrigin = NormalizeOrigin(origin);
149129

150-
if (!_policiesPerOrigin.TryGetValue(normalizedOrigin, out PolicyWrap policyWrapper))
151-
{
152-
policyWrapper = Policy.WrapAsync(_policyCreator(normalizedOrigin)
153-
.ToArray());
154-
155-
_policiesPerOrigin.TryAdd(normalizedOrigin, policyWrapper);
156-
}
157-
158-
return policyWrapper;
130+
// Executes the action applying all
131+
// the policies defined in the wrapper
132+
return _policyWrap.ExecuteAsync(() => action(), new Context(normalizedOrigin));
159133
}
160134

135+
161136
private static string NormalizeOrigin(string origin)
162137
{
163138
return origin?.Trim()?.ToLower();

src/Web/WebMVC/Infrastructure/ResilientHttpClientFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public ResilientHttpClientFactory(ILogger<ResilientHttpClient> logger)
1717
=>_logger = logger;
1818

1919
public ResilientHttpClient CreateResilientHttpClient()
20-
=> new ResilientHttpClient((origin) => CreatePolicies(), _logger);
20+
=> new ResilientHttpClient(CreatePolicies(), _logger);
2121

2222

2323
private Policy[] CreatePolicies()

0 commit comments

Comments
 (0)