grpc improvements

This commit is contained in:
Borja García Rodríguez 2020-12-17 11:15:36 +01:00
parent 792629ae03
commit 4e948d0a04
6 changed files with 46 additions and 66 deletions

View File

@ -1,7 +1,6 @@
using Grpc.Core; using Grpc.Core;
using Grpc.Core.Interceptors; using Grpc.Core.Interceptors;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Infrastructure namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Infrastructure
@ -30,7 +29,6 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Infrastruct
try try
{ {
var response = await t; var response = await t;
_logger.LogDebug($"Response received: {response}");
return response; return response;
} }
catch (RpcException e) catch (RpcException e)

View File

@ -1,48 +1,32 @@
using CatalogApi; using CatalogApi;
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config;
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models;
using Microsoft.Extensions.Options;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using static CatalogApi.Catalog;
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services
{ {
public class CatalogService : ICatalogService public class CatalogService : ICatalogService
{ {
private readonly HttpClient _httpClient; private readonly Catalog.CatalogClient _client;
private readonly UrlsConfig _urls;
public CatalogService(HttpClient httpClient, IOptions<UrlsConfig> config) public CatalogService(Catalog.CatalogClient client)
{ {
_httpClient = httpClient; _client = client;
_urls = config.Value;
} }
public async Task<CatalogItem> GetCatalogItemAsync(int id) public async Task<CatalogItem> GetCatalogItemAsync(int id)
{ {
var request = new CatalogItemRequest { Id = id };
return await GrpcCallerService.CallService(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id), async channel => var response = await _client.GetItemByIdAsync(request);
{ return MapToCatalogItemResponse(response);
var client = new CatalogClient(channel);
var request = new CatalogItemRequest { Id = id };
var response = await client.GetItemByIdAsync(request);
return MapToCatalogItemResponse(response);
});
} }
public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids) public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)
{ {
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async channel=> var response = await _client.GetItemsByIdsAsync(request);
{ return response.Data.Select(MapToCatalogItemResponse);
var client = new CatalogClient(channel);
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
var response = await client.GetItemsByIdsAsync(request);
return response.Data.Select(this.MapToCatalogItemResponse);
});
} }
private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse) private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse)

View File

@ -1,4 +1,5 @@
using Devspaces.Support; using CatalogApi;
using Devspaces.Support;
using GrpcBasket; using GrpcBasket;
using HealthChecks.UI.Client; using HealthChecks.UI.Client;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
@ -181,9 +182,6 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
//register http services //register http services
services.AddHttpClient<ICatalogService, CatalogService>()
.AddDevspacesSupport();
services.AddHttpClient<IOrderApiClient, OrderApiClient>() services.AddHttpClient<IOrderApiClient, OrderApiClient>()
.AddDevspacesSupport(); .AddDevspacesSupport();
@ -195,7 +193,7 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
public static IServiceCollection AddGrpcServices(this IServiceCollection services) public static IServiceCollection AddGrpcServices(this IServiceCollection services)
{ {
services.AddSingleton<GrpcExceptionInterceptor>(); services.AddTransient<GrpcExceptionInterceptor>();
services.AddScoped<IBasketService, BasketService>(); services.AddScoped<IBasketService, BasketService>();
@ -205,6 +203,14 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
options.Address = new Uri(basketApi); options.Address = new Uri(basketApi);
}).AddInterceptor<GrpcExceptionInterceptor>(); }).AddInterceptor<GrpcExceptionInterceptor>();
services.AddScoped<ICatalogService, CatalogService>();
services.AddGrpcClient<Catalog.CatalogClient>((services, options) =>
{
var catalogApi = services.GetRequiredService<IOptions<UrlsConfig>>().Value.GrpcCatalog;
options.Address = new Uri(catalogApi);
}).AddInterceptor<GrpcExceptionInterceptor>();
return services; return services;
} }

View File

@ -1,7 +1,6 @@
using Grpc.Core; using Grpc.Core;
using Grpc.Core.Interceptors; using Grpc.Core.Interceptors;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Infrastructure namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Infrastructure
@ -30,7 +29,6 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Infrastructure
try try
{ {
var response = await t; var response = await t;
_logger.LogDebug($"Response received: {response}");
return response; return response;
} }
catch (RpcException e) catch (RpcException e)

View File

@ -1,53 +1,41 @@
using CatalogApi; using CatalogApi;
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config;
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using static CatalogApi.Catalog;
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
{ {
public class CatalogService : ICatalogService public class CatalogService : ICatalogService
{ {
private readonly HttpClient _httpClient; private readonly Catalog.CatalogClient _client;
private readonly ILogger<CatalogService> _logger; private readonly ILogger<CatalogService> _logger;
private readonly UrlsConfig _urls;
public CatalogService(HttpClient httpClient, ILogger<CatalogService> logger, IOptions<UrlsConfig> config) public CatalogService(Catalog.CatalogClient client, ILogger<CatalogService> logger)
{ {
_httpClient = httpClient; _client = client;
_logger = logger; _logger = logger;
_urls = config.Value;
} }
public async Task<CatalogItem> GetCatalogItemAsync(int id) public async Task<CatalogItem> GetCatalogItemAsync(int id)
{ {
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async channel => var request = new CatalogItemRequest { Id = id };
{ _logger.LogInformation("grpc client created, request = {@request}", request);
var client = new CatalogClient(channel); var response = await _client.GetItemByIdAsync(request);
var request = new CatalogItemRequest { Id = id }; _logger.LogInformation("grpc response {@response}", response);
_logger.LogInformation("grpc client created, request = {@request}", request); return MapToCatalogItemResponse(response);
var response = await client.GetItemByIdAsync(request);
_logger.LogInformation("grpc response {@response}", response);
return MapToCatalogItemResponse(response);
});
} }
public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids) public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)
{ {
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async channel => var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
{ _logger.LogInformation("grpc client created, request = {@request}", request);
var client = new CatalogClient(channel); var response = await _client.GetItemsByIdsAsync(request);
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 }; _logger.LogInformation("grpc response {@response}", response);
_logger.LogInformation("grpc client created, request = {@request}", request); return response.Data.Select(this.MapToCatalogItemResponse);
var response = await client.GetItemsByIdsAsync(request);
_logger.LogInformation("grpc response {@response}", response);
return response.Data.Select(this.MapToCatalogItemResponse);
});
} }
private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse) private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse)

View File

@ -1,4 +1,5 @@
using Devspaces.Support; using CatalogApi;
using Devspaces.Support;
using GrpcBasket; using GrpcBasket;
using HealthChecks.UI.Client; using HealthChecks.UI.Client;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
@ -184,9 +185,6 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
//register http services //register http services
services.AddHttpClient<ICatalogService, CatalogService>()
.AddDevspacesSupport();
services.AddHttpClient<IOrderApiClient, OrderApiClient>() services.AddHttpClient<IOrderApiClient, OrderApiClient>()
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>() .AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
.AddDevspacesSupport(); .AddDevspacesSupport();
@ -200,7 +198,7 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
public static IServiceCollection AddGrpcServices(this IServiceCollection services) public static IServiceCollection AddGrpcServices(this IServiceCollection services)
{ {
services.AddSingleton<GrpcExceptionInterceptor>(); services.AddTransient<GrpcExceptionInterceptor>();
services.AddScoped<IBasketService, BasketService>(); services.AddScoped<IBasketService, BasketService>();
@ -210,6 +208,14 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
options.Address = new Uri(basketApi); options.Address = new Uri(basketApi);
}).AddInterceptor<GrpcExceptionInterceptor>(); }).AddInterceptor<GrpcExceptionInterceptor>();
services.AddScoped<ICatalogService, CatalogService>();
services.AddGrpcClient<Catalog.CatalogClient>((services, options) =>
{
var catalogApi = services.GetRequiredService<IOptions<UrlsConfig>>().Value.GrpcCatalog;
options.Address = new Uri(catalogApi);
}).AddInterceptor<GrpcExceptionInterceptor>();
return services; return services;
} }
} }