grpc improvements
This commit is contained in:
parent
792629ae03
commit
4e948d0a04
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user