Browse Source

refactoring the grpc client

features/migration-dotnet3
ericuss 5 years ago
parent
commit
311e1a2bfd
4 changed files with 114 additions and 56 deletions
  1. +0
    -2
      src/ApiGateways/Web.Bff.Shopping/aggregator/Controllers/BasketController.cs
  2. +41
    -52
      src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs
  3. +71
    -0
      src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs
  4. +2
    -2
      src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs

+ 0
- 2
src/ApiGateways/Web.Bff.Shopping/aggregator/Controllers/BasketController.cs View File

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


+ 41
- 52
src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs View File

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


+ 71
- 0
src/ApiGateways/Web.Bff.Shopping/aggregator/Services/GrpcCallerService.cs 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;
}
}
}

+ 2
- 2
src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs View File

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


Loading…
Cancel
Save