Skip to content

Commit 454525d

Browse files
author
ericuss
committed
refactored the grpc client
1 parent 311e1a2 commit 454525d

4 files changed

Lines changed: 58 additions & 138 deletions

File tree

src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,35 @@
22
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models;
33
using Microsoft.Extensions.Logging;
44
using Microsoft.Extensions.Options;
5-
using Newtonsoft.Json;
6-
using System.Net.Http;
75
using System.Threading.Tasks;
86
using Grpc.Net.Client;
9-
using System;
107
using System.Linq;
118
using GrpcBasket;
12-
using Grpc.Core;
9+
using System.Net.Http;
1310

1411
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
1512
{
1613
public class BasketService : IBasketService
1714
{
18-
private readonly HttpClient _httpClient;
1915
private readonly UrlsConfig _urls;
16+
public readonly HttpClient _httpClient;
2017
private readonly ILogger<BasketService> _logger;
2118

2219
public BasketService(HttpClient httpClient, IOptions<UrlsConfig> config, ILogger<BasketService> logger)
2320
{
24-
_httpClient = httpClient;
2521
_urls = config.Value;
22+
_httpClient = httpClient;
2623
_logger = logger;
2724
}
2825

26+
2927
public async Task<BasketData> GetById(string id)
3028
{
3129
return await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
3230
{
33-
_logger.LogWarning("######################## grpc client created, request = {@id}", id);
34-
3531
var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
36-
3732
_logger.LogDebug("grpc client created, request = {@id}", id);
3833
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
39-
4034
_logger.LogDebug("grpc response {@response}", response);
4135

4236
return MapToBasketData(response);
@@ -54,37 +48,6 @@ await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
5448

5549
return client.UpdateBasketAsync(request);
5650
});
57-
58-
//AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
59-
//AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
60-
61-
//using (var httpClientHandler = new HttpClientHandler())
62-
//{
63-
// httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
64-
// using (var httpClient = new HttpClient(httpClientHandler))
65-
// {
66-
// httpClient.BaseAddress = new Uri(_urls.GrpcBasket);
67-
68-
// _logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress);
69-
70-
// var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
71-
72-
73-
// try
74-
// {
75-
76-
// _logger.LogDebug("Grpc update basket currentBasket {@currentBasket}", currentBasket);
77-
// var request = MapToCustomerBasketRequest(currentBasket);
78-
// _logger.LogDebug("Grpc update basket request {@request}", request);
79-
80-
// await client.UpdateBasketAsync(request);
81-
// }
82-
// catch (RpcException e)
83-
// {
84-
// _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
85-
// }
86-
// }
87-
//}
8851
}
8952

9053
private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest)

src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models;
33
using Microsoft.Extensions.Logging;
44
using Microsoft.Extensions.Options;
5-
using Newtonsoft.Json;
65
using System.Collections.Generic;
76
using System.Net.Http;
87
using System.Threading.Tasks;
@@ -11,7 +10,6 @@
1110
using System;
1211
using static CatalogApi.Catalog;
1312
using System.Linq;
14-
using Grpc.Core;
1513

1614
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
1715
{
@@ -41,36 +39,15 @@ public async Task<CatalogItem> GetCatalogItemAsync(int id)
4139

4240
public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)
4341
{
44-
45-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
46-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
47-
48-
using (var httpClientHandler = new HttpClientHandler())
42+
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async httpClient =>
4943
{
50-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
51-
using (var httpClient = new HttpClient(httpClientHandler))
52-
{
53-
httpClient.BaseAddress = new Uri(_urls.GrpcCatalog);
54-
55-
_logger.LogInformation("Creating grpc client for CatalogClient {@httpClient.BaseAddress}, {@httpClient} ", httpClient.BaseAddress, httpClient);
56-
57-
try
58-
{
59-
var client = GrpcClient.Create<CatalogClient>(httpClient);
60-
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
61-
_logger.LogInformation("grpc client created, request = {@request}", request);
62-
var response = await client.GetItemsByIdsAsync(request);
63-
_logger.LogInformation("grpc response {@response}", response);
64-
return response.Data.Select(this.MapToCatalogItemResponse);
65-
}
66-
catch (RpcException e)
67-
{
68-
_logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
69-
}
70-
}
71-
}
72-
73-
return null;
44+
var client = GrpcClient.Create<CatalogClient>(httpClient);
45+
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
46+
_logger.LogInformation("grpc client created, request = {@request}", request);
47+
var response = await client.GetItemsByIdsAsync(request);
48+
_logger.LogInformation("grpc response {@response}", response);
49+
return response.Data.Select(this.MapToCatalogItemResponse);
50+
});
7451
}
7552

7653
private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse)

src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,30 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
88
{
99
public static class GrpcCallerService
1010
{
11-
public static Task<TResponse> CallService<TResponse>(string urlGrpc, Func<HttpClient, Task<TResponse>> func)
11+
public static async Task<TResponse> CallService<TResponse>(string urlGrpc, Func<HttpClient, Task<TResponse>> func)
1212
{
1313
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
1414
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
1515

16-
using (var httpClientHandler = new HttpClientHandler())
16+
using var httpClientHandler = new HttpClientHandler
1717
{
18-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
19-
using (var httpClient = new HttpClient(httpClientHandler))
20-
{
21-
httpClient.BaseAddress = new Uri(urlGrpc);
22-
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
18+
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
19+
};
2320

24-
try
25-
{
26-
return func(httpClient);
27-
}
28-
catch (RpcException e)
29-
{
30-
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
31-
}
32-
}
21+
using var httpClient = new HttpClient(httpClientHandler)
22+
{
23+
BaseAddress = new Uri(urlGrpc)
24+
};
25+
26+
Log.Information("Creating grpc client base address urlGrpc ={@urlGrpc}, BaseAddress={@BaseAddress} ", urlGrpc, httpClient.BaseAddress);
27+
28+
try
29+
{
30+
return await func(httpClient);
31+
}
32+
catch (RpcException e)
33+
{
34+
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
3335
}
3436

3537
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
@@ -38,34 +40,34 @@ public static Task<TResponse> CallService<TResponse>(string urlGrpc, Func<HttpCl
3840
return default;
3941
}
4042

41-
public static Task CallService(string urlGrpc, Func<HttpClient, Task> func)
43+
public static async Task CallService(string urlGrpc, Func<HttpClient, Task> func)
4244
{
4345
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
4446
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
4547

46-
using (var httpClientHandler = new HttpClientHandler())
48+
using var httpClientHandler = new HttpClientHandler
49+
{
50+
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
51+
};
52+
53+
using var httpClient = new HttpClient(httpClientHandler)
4754
{
48-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
49-
using (var httpClient = new HttpClient(httpClientHandler))
50-
{
51-
httpClient.BaseAddress = new Uri(urlGrpc);
52-
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
55+
BaseAddress = new Uri(urlGrpc)
56+
};
57+
58+
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
5359

54-
try
55-
{
56-
return func(httpClient);
57-
}
58-
catch (RpcException e)
59-
{
60-
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
61-
}
62-
}
60+
try
61+
{
62+
await func(httpClient);
63+
}
64+
catch (RpcException e)
65+
{
66+
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
6367
}
6468

6569
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
6670
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false);
67-
68-
return default;
6971
}
7072
}
7173
}

src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,52 +14,30 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
1414
{
1515
public class OrderingService : IOrderingService
1616
{
17-
private readonly HttpClient _httpClient;
1817
private readonly UrlsConfig _urls;
1918
private readonly ILogger<OrderingService> _logger;
19+
public readonly HttpClient _httpClient;
2020

2121
public OrderingService(HttpClient httpClient, IOptions<UrlsConfig> config, ILogger<OrderingService> logger)
2222
{
23-
_httpClient = httpClient;
2423
_urls = config.Value;
24+
_httpClient = httpClient;
2525
_logger = logger;
2626
}
2727

2828
public async Task<OrderData> GetOrderDraftAsync(BasketData basketData)
2929
{
30-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
31-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
32-
33-
using (var httpClientHandler = new HttpClientHandler())
30+
return await GrpcCallerService.CallService(_urls.GrpcOrdering, async httpClient =>
3431
{
35-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
36-
using (var httpClient = new HttpClient(httpClientHandler))
37-
{
38-
httpClient.BaseAddress = new Uri(_urls.GrpcOrdering);
39-
40-
_logger.LogDebug(" Creating grpc client for ordering {@httpClient.BaseAddress}", httpClient.BaseAddress);
41-
42-
var client = GrpcClient.Create<OrderingGrpc.OrderingGrpcClient>(httpClient);
32+
var client = GrpcClient.Create<OrderingGrpc.OrderingGrpcClient>(httpClient);
33+
_logger.LogDebug(" grpc client created, basketData={@basketData}", basketData);
4334

44-
_logger.LogDebug(" grpc client created, basketData={@basketData}", basketData);
45-
46-
try
47-
{
48-
var command = MapToOrderDraftCommand(basketData);
49-
var response = await client.CreateOrderDraftFromBasketDataAsync(command);
50-
51-
_logger.LogDebug(" grpc response: {@response}", response);
52-
53-
return MapToResponse(response, basketData);
54-
}
55-
catch (RpcException e)
56-
{
57-
_logger.LogError($"Error calling via grpc to ordering: {e.Status} - {e.Message}");
58-
}
59-
}
60-
}
35+
var command = MapToOrderDraftCommand(basketData);
36+
var response = await client.CreateOrderDraftFromBasketDataAsync(command);
37+
_logger.LogDebug(" grpc response: {@response}", response);
6138

62-
return null;
39+
return MapToResponse(response, basketData);
40+
});
6341
}
6442

6543
private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft, BasketData basketData)

0 commit comments

Comments
 (0)