refactoring the grpc client

This commit is contained in:
ericuss 2019-08-28 12:03:09 +02:00
parent 260bfcbc45
commit 311e1a2bfd
4 changed files with 114 additions and 56 deletions

View File

@ -39,8 +39,6 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Controllers
} }
// Retrieve the current basket // Retrieve the current basket
Log.Information("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ GetByIdAsync @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
var basket = await _basket.GetById(data.BuyerId) ?? new BasketData(data.BuyerId); var basket = await _basket.GetById(data.BuyerId) ?? new BasketData(data.BuyerId);
Log.Debug("get basket by id response={@response}", basket); Log.Debug("get basket by id response={@response}", basket);

View File

@ -28,74 +28,63 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
public async Task<BasketData> GetById(string id) public async Task<BasketData> GetById(string id)
{ {
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); return await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
using (var httpClientHandler = new HttpClientHandler())
{ {
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; _logger.LogWarning("######################## grpc client created, request = {@id}", id);
using (var httpClient = new HttpClient(httpClientHandler))
{
//httpClient.BaseAddress = new Uri("http://10.0.75.1:5580");
httpClient.BaseAddress = new Uri(_urls.GrpcBasket);
_logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress); var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
var client = GrpcClient.Create<Basket.BasketClient>(httpClient); _logger.LogDebug("grpc client created, request = {@id}", id);
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
_logger.LogDebug("grpc client created, request = {@id}", id); _logger.LogDebug("grpc response {@response}", response);
try return MapToBasketData(response);
{ });
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
_logger.LogDebug("grpc response {@response}", response);
return MapToBasketData(response);
}
catch (RpcException e)
{
_logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
}
}
}
return null;
} }
public async Task UpdateAsync(BasketData currentBasket) public async Task UpdateAsync(BasketData currentBasket)
{ {
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
using (var httpClientHandler = new HttpClientHandler())
{ {
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
using (var httpClient = new HttpClient(httpClientHandler)) _logger.LogDebug("Grpc update basket currentBasket {@currentBasket}", currentBasket);
{ var request = MapToCustomerBasketRequest(currentBasket);
httpClient.BaseAddress = new Uri(_urls.GrpcBasket); _logger.LogDebug("Grpc update basket request {@request}", request);
_logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress); return client.UpdateBasketAsync(request);
});
var client = GrpcClient.Create<Basket.BasketClient>(httpClient); //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
//AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
//using (var httpClientHandler = new HttpClientHandler())
//{
// httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
// using (var httpClient = new HttpClient(httpClientHandler))
// {
// httpClient.BaseAddress = new Uri(_urls.GrpcBasket);
// _logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress);
// var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
try // try
{ // {
_logger.LogInformation("Grpc update basket currentBasket {@currentBasket}", currentBasket); // _logger.LogDebug("Grpc update basket currentBasket {@currentBasket}", currentBasket);
var request = MapToCustomerBasketRequest(currentBasket); // var request = MapToCustomerBasketRequest(currentBasket);
_logger.LogInformation("Grpc update basket request {@request}", request); // _logger.LogDebug("Grpc update basket request {@request}", request);
await client.UpdateBasketAsync(request); // await client.UpdateBasketAsync(request);
} // }
catch (RpcException e) // catch (RpcException e)
{ // {
_logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}"); // _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
} // }
} // }
} //}
} }
private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest) private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest)

View File

@ -0,0 +1,71 @@
using System.Net.Http;
using System.Threading.Tasks;
using System;
using Grpc.Core;
using Serilog;
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
{
public static class GrpcCallerService
{
public static Task<TResponse> CallService<TResponse>(string urlGrpc, Func<HttpClient, Task<TResponse>> func)
{
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
using (var httpClientHandler = new HttpClientHandler())
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
using (var httpClient = new HttpClient(httpClientHandler))
{
httpClient.BaseAddress = new Uri(urlGrpc);
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
try
{
return func(httpClient);
}
catch (RpcException e)
{
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
}
}
}
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false);
return default;
}
public static Task CallService(string urlGrpc, Func<HttpClient, Task> func)
{
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
using (var httpClientHandler = new HttpClientHandler())
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
using (var httpClient = new HttpClient(httpClientHandler))
{
httpClient.BaseAddress = new Uri(urlGrpc);
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
try
{
return func(httpClient);
}
catch (RpcException e)
{
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
}
}
}
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false);
return default;
}
}
}

View File

@ -144,9 +144,9 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
options.SwaggerDoc("v1", new OpenApiInfo options.SwaggerDoc("v1", new OpenApiInfo
{ {
Title = "Shopping Aggregator for Mobile Clients", Title = "Shopping Aggregator for Web Clients",
Version = "v1", Version = "v1",
Description = "Shopping Aggregator for Mobile Clients" Description = "Shopping Aggregator for Web Clients"
}); });
options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme