From 9cf4ade24b63af828c038e67cb84d12322c11e6c Mon Sep 17 00:00:00 2001 From: Savorboard Date: Wed, 13 Mar 2019 18:03:59 +0800 Subject: [PATCH] Refactor Basket Api eventbus using CAP --- .../Basket/Basket.API/Basket.API.csproj | 4 + .../OrderStartedIntegrationEventHandler.cs | 9 +- ...ductPriceChangedIntegrationEventHandler.cs | 4 +- src/Services/Basket/Basket.API/Startup.cs | 124 ++++-------------- 4 files changed, 40 insertions(+), 101 deletions(-) diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index 087fdca66..262e0afa7 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -18,6 +18,10 @@ + + + + diff --git a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs index cb7b6a2d6..13f79740c 100644 --- a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs +++ b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs @@ -6,10 +6,11 @@ using Microsoft.Extensions.Logging; using Serilog.Context; using System; using System.Threading.Tasks; +using DotNetCore.CAP; namespace Basket.API.IntegrationEvents.EventHandling { - public class OrderStartedIntegrationEventHandler : IIntegrationEventHandler + public class OrderStartedIntegrationEventHandler : IIntegrationEventHandler, ICapSubscribe { private readonly IBasketRepository _repository; private readonly ILogger _logger; @@ -22,6 +23,7 @@ namespace Basket.API.IntegrationEvents.EventHandling _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } + //TODO: [CapSubscribe(nameof(OrderStartedIntegrationEvent))] public async Task Handle(OrderStartedIntegrationEvent @event) { using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) @@ -32,7 +34,4 @@ namespace Basket.API.IntegrationEvents.EventHandling } } } -} - - - +} \ No newline at end of file diff --git a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs index c27200e6f..272d84ced 100644 --- a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs +++ b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs @@ -6,10 +6,11 @@ using Serilog.Context; using System; using System.Linq; using System.Threading.Tasks; +using DotNetCore.CAP; namespace Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.EventHandling { - public class ProductPriceChangedIntegrationEventHandler : IIntegrationEventHandler + public class ProductPriceChangedIntegrationEventHandler : IIntegrationEventHandler, ICapSubscribe { private readonly ILogger _logger; private readonly IBasketRepository _repository; @@ -22,6 +23,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.Even _repository = repository ?? throw new ArgumentNullException(nameof(repository)); } + //TODO: [CapSubscribe(nameof(ProductPriceChangedIntegrationEvent))] public async Task Handle(ProductPriceChangedIntegrationEvent @event) { using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index 235b787d0..a0a95a8d7 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -3,9 +3,7 @@ using Autofac.Extensions.DependencyInjection; using Basket.API.Infrastructure.Filters; using Basket.API.Infrastructure.Middlewares; using Basket.API.IntegrationEvents.EventHandling; -using Basket.API.IntegrationEvents.Events; using HealthChecks.UI.Client; - using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -14,13 +12,7 @@ using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.Azure.ServiceBus; -using Microsoft.eShopOnContainers.BuildingBlocks.EventBus; -using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; -using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ; -using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus; using Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.EventHandling; -using Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.Events; using Microsoft.eShopOnContainers.Services.Basket.API.Model; using Microsoft.eShopOnContainers.Services.Basket.API.Services; using Microsoft.Extensions.Configuration; @@ -28,7 +20,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using RabbitMQ.Client; using StackExchange.Redis; using Swashbuckle.AspNetCore.Swagger; using System; @@ -84,49 +75,39 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API return ConnectionMultiplexer.Connect(configuration); }); - - if (Configuration.GetValue("AzureServiceBusEnabled")) + services.AddCap(options => { - services.AddSingleton(sp => + options.UseInMemoryStorage(); + if (Configuration.GetValue("AzureServiceBusEnabled")) { - var logger = sp.GetRequiredService>(); - - var serviceBusConnectionString = Configuration["EventBusConnection"]; - var serviceBusConnection = new ServiceBusConnectionStringBuilder(serviceBusConnectionString); - - return new DefaultServiceBusPersisterConnection(serviceBusConnection, logger); - }); - } - else - { - services.AddSingleton(sp => + options.UseAzureServiceBus(Configuration["EventBusConnection"]); + } + else { - var logger = sp.GetRequiredService>(); - - var factory = new ConnectionFactory() + options.UseRabbitMQ(conf => { - HostName = Configuration["EventBusConnection"] - }; - - if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) - { - factory.UserName = Configuration["EventBusUserName"]; - } - - if (!string.IsNullOrEmpty(Configuration["EventBusPassword"])) - { - factory.Password = Configuration["EventBusPassword"]; - } - - var retryCount = 5; - if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) - { - retryCount = int.Parse(Configuration["EventBusRetryCount"]); - } + conf.HostName = Configuration["EventBusConnection"]; + if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) + { + conf.UserName = Configuration["EventBusUserName"]; + } + if (!string.IsNullOrEmpty(Configuration["EventBusPassword"])) + { + conf.Password = Configuration["EventBusPassword"]; + } + }); + } + + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + options.FailedRetryCount = int.Parse(Configuration["EventBusRetryCount"]); + } - return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); - }); - } + if (!string.IsNullOrEmpty(Configuration["SubscriptionClientName"])) + { + options.DefaultGroup = Configuration["SubscriptionClientName"]; + } + }); RegisterEventBus(services); @@ -215,9 +196,6 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API c.OAuthClientId ("basketswaggerui"); c.OAuthAppName("Basket Swagger UI"); }); - - ConfigureEventBus(app); - } private void RegisterAppInsights(IServiceCollection services) @@ -270,53 +248,9 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API private void RegisterEventBus(IServiceCollection services) { - var subscriptionClientName = Configuration["SubscriptionClientName"]; - - if (Configuration.GetValue("AzureServiceBusEnabled")) - { - services.AddSingleton(sp => - { - var serviceBusPersisterConnection = sp.GetRequiredService(); - var iLifetimeScope = sp.GetRequiredService(); - var logger = sp.GetRequiredService>(); - var eventBusSubcriptionsManager = sp.GetRequiredService(); - - return new EventBusServiceBus(serviceBusPersisterConnection, logger, - eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope); - }); - } - else - { - services.AddSingleton(sp => - { - var rabbitMQPersistentConnection = sp.GetRequiredService(); - var iLifetimeScope = sp.GetRequiredService(); - var logger = sp.GetRequiredService>(); - var eventBusSubcriptionsManager = sp.GetRequiredService(); - - var retryCount = 5; - if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) - { - retryCount = int.Parse(Configuration["EventBusRetryCount"]); - } - - return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount); - }); - } - - services.AddSingleton(); - services.AddTransient(); services.AddTransient(); - } - - private void ConfigureEventBus(IApplicationBuilder app) - { - var eventBus = app.ApplicationServices.GetRequiredService(); - - eventBus.Subscribe(); - eventBus.Subscribe(); - } + } } public static class CustomExtensionMethods