From a7e461bd4c2dbdd5828f2c3173e2d82bc82be4e1 Mon Sep 17 00:00:00 2001 From: meysamhadeli Date: Thu, 1 Sep 2022 15:32:07 +0430 Subject: [PATCH] add sample for multi-consumers for user-created --- src/BuildingBlocks/Logging/Extensions.cs | 8 ++---- .../Booking/src/Booking.Api/Program.cs | 6 +--- .../src/Booking/Extensions/CoreExtensions.cs | 8 +++++- src/Services/Flight/src/Flight.Api/Program.cs | 2 +- .../src/Flight/Extensions/CoreExtensions.cs | 8 +++++- .../Flight/src/Flight/FlightConsumer.cs | 15 ---------- .../RegisterNewUserConsumerHandler.cs | 28 +++++++++++++++++++ .../Identity/src/Identity.Api/Program.cs | 2 +- ...-key-278877ED714C54A83CDAEF062491E880.json | 1 - .../src/Identity/Extensions/CoreExtensions.cs | 8 +++++- .../Passenger/src/Passenger.Api/Program.cs | 2 +- .../Passenger/Extensions/CoreExtensions.cs | 10 ++++++- .../RegisterNewUserConsumerHandler.cs | 19 +++++++++++-- .../Passenger/src/Passenger/Passenger.csproj | 1 + 14 files changed, 81 insertions(+), 37 deletions(-) delete mode 100644 src/Services/Flight/src/Flight/FlightConsumer.cs create mode 100644 src/Services/Flight/src/Flight/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs delete mode 100644 src/Services/Identity/src/Identity.Api/keys/is-signing-key-278877ED714C54A83CDAEF062491E880.json rename src/Services/Passenger/src/Passenger/Identity/{ => Consumers}/RegisterNewUser/RegisterNewUserConsumerHandler.cs (64%) diff --git a/src/BuildingBlocks/Logging/Extensions.cs b/src/BuildingBlocks/Logging/Extensions.cs index 806be39..b24ba8e 100644 --- a/src/BuildingBlocks/Logging/Extensions.cs +++ b/src/BuildingBlocks/Logging/Extensions.cs @@ -17,10 +17,6 @@ public static class Extensions { public static WebApplicationBuilder AddCustomSerilog(this WebApplicationBuilder builder) { - Log.Logger = new LoggerConfiguration() - .WriteTo.Console() - .CreateBootstrapLogger(); - builder.Host.UseSerilog((context, loggerConfiguration) => { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); @@ -32,11 +28,11 @@ public static class Extensions : LogEventLevel.Information; loggerConfiguration - .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(loggOptions.ElasticUri)) { AutoRegisterTemplate = true, - IndexFormat = $"{appOptions.Name}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}" + IndexFormat = + $"{appOptions.Name}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}" }) .WriteTo.SpectreConsole(loggOptions.LogTemplate, logLevel) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Error) diff --git a/src/Services/Booking/src/Booking.Api/Program.cs b/src/Services/Booking/src/Booking.Api/Program.cs index d3321e5..44e272b 100644 --- a/src/Services/Booking/src/Booking.Api/Program.cs +++ b/src/Services/Booking/src/Booking.Api/Program.cs @@ -2,10 +2,7 @@ using Booking; using Booking.Configuration; using Booking.Data; using Booking.Extensions; -using BuildingBlocks.Core; -using BuildingBlocks.EFCore; using BuildingBlocks.EventStoreDB; -using BuildingBlocks.EventStoreDB.Projections; using BuildingBlocks.HealthCheck; using BuildingBlocks.IdsGenerator; using BuildingBlocks.Jwt; @@ -15,7 +12,6 @@ using BuildingBlocks.MassTransit; using BuildingBlocks.Mongo; using BuildingBlocks.OpenTelemetry; using BuildingBlocks.PersistMessageProcessor; -using BuildingBlocks.PersistMessageProcessor.Data; using BuildingBlocks.Swagger; using BuildingBlocks.Web; using Figgle; @@ -38,7 +34,7 @@ builder.Services.AddPersistMessage(configuration); builder.Services.AddMongoDbContext(configuration); builder.AddCustomSerilog(); -builder.Services.AddCore(); +builder.Services.AddCore(configuration); builder.Services.AddJwt(); builder.Services.AddControllers(); builder.Services.AddHttpContextAccessor(); diff --git a/src/Services/Booking/src/Booking/Extensions/CoreExtensions.cs b/src/Services/Booking/src/Booking/Extensions/CoreExtensions.cs index beaf121..a00853f 100644 --- a/src/Services/Booking/src/Booking/Extensions/CoreExtensions.cs +++ b/src/Services/Booking/src/Booking/Extensions/CoreExtensions.cs @@ -1,13 +1,19 @@ using BuildingBlocks.Core; using BuildingBlocks.Utils; +using BuildingBlocks.Web; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Booking.Extensions; public static class CoreExtensions { - public static IServiceCollection AddCore(this IServiceCollection services) + public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration) { + services.AddOptions() + .Bind(configuration.GetSection(nameof(AppOptions))) + .ValidateDataAnnotations(); + services.AddScoped(); services.AddTransient(); services.AddScoped(); diff --git a/src/Services/Flight/src/Flight.Api/Program.cs b/src/Services/Flight/src/Flight.Api/Program.cs index 975b85e..fdf339f 100644 --- a/src/Services/Flight/src/Flight.Api/Program.cs +++ b/src/Services/Flight/src/Flight.Api/Program.cs @@ -40,7 +40,7 @@ builder.Services.AddMongoDbContext(configuration); builder.Services.AddPersistMessage(configuration); builder.AddCustomSerilog(); -builder.Services.AddCore(); +builder.Services.AddCore(configuration); builder.Services.AddJwt(); builder.Services.AddControllers(); builder.Services.AddCustomSwagger(configuration, typeof(FlightRoot).Assembly); diff --git a/src/Services/Flight/src/Flight/Extensions/CoreExtensions.cs b/src/Services/Flight/src/Flight/Extensions/CoreExtensions.cs index f315d79..44c7c73 100644 --- a/src/Services/Flight/src/Flight/Extensions/CoreExtensions.cs +++ b/src/Services/Flight/src/Flight/Extensions/CoreExtensions.cs @@ -1,13 +1,19 @@ using BuildingBlocks.Core; using BuildingBlocks.Utils; +using BuildingBlocks.Web; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Flight.Extensions; public static class CoreExtensions { - public static IServiceCollection AddCore(this IServiceCollection services) + public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration) { + services.AddOptions() + .Bind(configuration.GetSection(nameof(AppOptions))) + .ValidateDataAnnotations(); + services.AddScoped(); services.AddTransient(); services.AddScoped(); diff --git a/src/Services/Flight/src/Flight/FlightConsumer.cs b/src/Services/Flight/src/Flight/FlightConsumer.cs deleted file mode 100644 index 8d6db0f..0000000 --- a/src/Services/Flight/src/Flight/FlightConsumer.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Threading.Tasks; -using BuildingBlocks.Contracts.EventBus.Messages; -using MassTransit; - -namespace Flight; - -public class FlightConsumer : IConsumer -{ - public Task Consume(ConsumeContext context) - { - Console.WriteLine("This consumer is for test"); - return Task.CompletedTask; - } -} diff --git a/src/Services/Flight/src/Flight/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs b/src/Services/Flight/src/Flight/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs new file mode 100644 index 0000000..20f997b --- /dev/null +++ b/src/Services/Flight/src/Flight/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using BuildingBlocks.Contracts.EventBus.Messages; +using BuildingBlocks.Web; +using Humanizer; +using MassTransit; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Flight.Identity.Consumers.RegisterNewUser; + +public class RegisterNewUserConsumerHandler : IConsumer +{ + private readonly AppOptions _options; + private readonly ILogger _logger; + + public RegisterNewUserConsumerHandler(IOptions options, + ILogger logger) + { + _options = options.Value; + _logger = logger; + } + + public Task Consume(ConsumeContext context) + { + _logger.LogInformation($"this is a test consumer for {nameof(UserCreated).Underscore()} in {_options.Name}"); + return Task.CompletedTask; + } +} diff --git a/src/Services/Identity/src/Identity.Api/Program.cs b/src/Services/Identity/src/Identity.Api/Program.cs index 2e98509..3e14a20 100644 --- a/src/Services/Identity/src/Identity.Api/Program.cs +++ b/src/Services/Identity/src/Identity.Api/Program.cs @@ -31,7 +31,7 @@ Console.WriteLine(FiggleFonts.Standard.Render(appOptions.Name)); builder.Services.AddPersistMessage(configuration); builder.Services.AddCustomDbContext(configuration); builder.Services.AddScoped(); -builder.Services.AddCore(); +builder.Services.AddCore(configuration); builder.AddCustomSerilog(); builder.Services.AddControllers(); builder.Services.AddCustomSwagger(configuration, typeof(IdentityRoot).Assembly); diff --git a/src/Services/Identity/src/Identity.Api/keys/is-signing-key-278877ED714C54A83CDAEF062491E880.json b/src/Services/Identity/src/Identity.Api/keys/is-signing-key-278877ED714C54A83CDAEF062491E880.json deleted file mode 100644 index 9235bdc..0000000 --- a/src/Services/Identity/src/Identity.Api/keys/is-signing-key-278877ED714C54A83CDAEF062491E880.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"Id":"278877ED714C54A83CDAEF062491E880","Created":"2022-05-10T18:36:41.851832Z","Algorithm":"RS256","IsX509Certificate":false,"Data":"CfDJ8Pyl4Q0BTFBNj7ITVoMSIQjZOI0m28DbhLN9FfcLU2RNyyq6bhVmtnMTE-lHtjLLyF4A5xI-Ah4YV38OKLaGxRgNCET8ahafy1N879KJMQE9AT9iOI3hkMsKT2aBPlQS9Qzm0S_PEzdDHMrY9y9rhdXZwG7hisjMGtuAXqCcCEQuFOXOn12yGLPMVtCmIVriElJ2evkem9Ccnpy02wywUSlM9bJ46w2a0MXRzTFvC-TGuEYYcShrij_quEqKqTdcmnO-gafbKrJBCwkrbpi0lZzmu5LMbPjYsj1GM4Sn0df3koL4ShP3-hI-kQYqmOBsHB742IHBMeIo_iIbfkeefCihTI6gUq7JgV6SpEM0zIbTLCH-fykB7wVlsmN8xa-X9fONpEQ9ZJfuLh0f9LiTrgjuCP2wgH_btlFmIN1dZb3o2PHLD1CfAkLrPAgMmNH1Wlc6XlMcD4aM9yLNVQX6JV4Wg4tfteolPuKGTznwk27ePZZ3iyEcEHW36A4OwnkA_n-4gjkpj7XCzS8NP1GgtEzV_9P9l2Sijcqyab2lZ1VB-HLVj4AwE4yJM0-TJSQ2QGQl3K5evuuGrajWCeVXyCZqjtA8KKd6L4Edb0z7y0INstn_DJyNj3NHoHQBtfbjOJWjSUhERCPCyQaMBGG4at-I6FKIkftOX3rsYvGRYUIcFMALNcYizdP4jElVM3Wh2voiouP57G_JGFgTMnb8R64UVsOpBIkvvC_3Xla3xlRWUvGX5YUxvf3r9vcmHKnPfsDPmXHj89GLZZcCjcQyCwzMazXQoEGNqAApsHmHTZkq1Cj91xv3Q1jZwB7zJ8Zz8A0M6kmhh2fdvfQI7l8yN0q-1eauGF8peCzCgWSrv6zwGXwHU5exn2CUNC23ei2FEgMeMdOAhnPs78X9EhbfjXsi6IHvYV9Tt1LDGDEKBkgBOvAMEYMfZDdcLfqSKDXedj3rlyFNXlDvrXVfcosXTacNi7QruJx5QyZRmezNOYd5SGO_gKzTFHzklrT56ExaZyOlv8tdOXAG5IYQSkEbVYbpITaysrY8V0lcMbKtXX2KpquqiRA33b7JuGZpISIQkQR7C_M4Ck7MtbiWfjGXR3cGaUFXquWqnYExAwq0yOCU9U3xC4jSd6NyA9LZ-sgj3cd9mDgWeQh-vSu20SPLuBXddqUYfziZz7FNo7I2C0StyITbIFBP0ABUYM4AfSt-hDfWK2yAbzSowuksUetvp3c1dT2LhCB0YMmLYGsmP5NbzNd6h71smxaTxTn6kR5oNzfeQV4WfJI80wE80hMl9ow1_laRqsV5BCV69I2Kl7zv5Fcu4UY6CPBuvrbvEfv52wSv19Vl7RGFRnJ1jKtaytll8B5s1oB0u7VU61Gb6jv6Q_LassYf6ygPGr0x5ZrgpI-CBWmZqIGLUDIRFrA_iuAjzw619w6n0LvyfsRu5-baB30popGUIJQPncMQN1_nu4al3O5fDGchfO7BvHD1mjI0oAGkO4OSABoQAq43EKGLygch1stUn9rB9tfk2D89zZMP66j98Br64O8sBQb2F6bOOzXuRZzsKhqGcrqXOk_zWOSrkUlbJ_YvVHYcpFm_OQEQ-CNgqrf658ZMrj4rrIrG2U6s1sT6AdmLgt90svSYWqB9UmJuSHL4vq5bBkoXVEBzeGhPralPCdKZaX4Iq1lPBskWI8B7bd_XcqVvww7b9TOzQ0z6UOuURLXCjH_t595AVI8pVpxJenQ_W1ATaNBU8S0TpMioaI3LiMUjDg55ART-m6ywSzOzp3jWfwyTzgVJEDy65Ob2dUS7Qo1jvDIUIDHRobEmqj-lKQz7S7Xs6jFuDqsMMoHLImxcxCPNoWN13dbTNzCkz9JqnOGmm27b-jBd5lkIpn_4fgRo4rHdLVUXrrYx1cvdRyhqyMU8Qw1FAwf5KZ37fNBZQSyV-17ww_THTTN6-SO5fcGzsHZyyoj93qFvjROATMFaEU9J1WBtFbKg5jep8lpFvhtTiuuHVpdLxjmR3rJWEiDbjggnt66_a5MN9wlffXb7Dei9purK2KDYcbDcZIJya3ZjXhgYXk-cgLqDPsCCfc4m8gG9eNymy4AiB-golUBeB4FSUnp1O4wOqB7iA6enrDR5m-lFns0tWqvzG_77S40ewUMMIjHFZNtX3ILgzccrUtqSzb8fA-0cTSKH6oXxIl71jWe8Y7XFc5uH_T6Z1dQsWlN6y666sc75T3-35c1z4VHx8zzb5CU0JaWUX9zbvHuhKKxVKMzr-1FSBvi0OM77QU0FPqKBLieYVOqOPxCIVhbAguCEbXmItsbWiusx3yUHiKZnGCq2EkYLbJw3HgENX3kgayuuSbJOnc2XR8A-0eb1_8z5KEUCLzoG_ntZ5ay7WTtu5gBfBssSufXLfACrMXWyS2_bymuyr7F2QPOa6E-qLo6jQZgPjQivrxkTZN6CC_rmpva-KpEBmFQ1g2BD1g9i","DataProtected":true} \ No newline at end of file diff --git a/src/Services/Identity/src/Identity/Extensions/CoreExtensions.cs b/src/Services/Identity/src/Identity/Extensions/CoreExtensions.cs index 5fa0526..e9af8d5 100644 --- a/src/Services/Identity/src/Identity/Extensions/CoreExtensions.cs +++ b/src/Services/Identity/src/Identity/Extensions/CoreExtensions.cs @@ -1,12 +1,18 @@ using BuildingBlocks.Core; +using BuildingBlocks.Web; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Identity.Extensions; public static class CoreExtensions { - public static IServiceCollection AddCore(this IServiceCollection services) + public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration) { + services.AddOptions() + .Bind(configuration.GetSection(nameof(AppOptions))) + .ValidateDataAnnotations(); + services.AddTransient(); services.AddScoped(); diff --git a/src/Services/Passenger/src/Passenger.Api/Program.cs b/src/Services/Passenger/src/Passenger.Api/Program.cs index 95eb0bb..020eac2 100644 --- a/src/Services/Passenger/src/Passenger.Api/Program.cs +++ b/src/Services/Passenger/src/Passenger.Api/Program.cs @@ -34,7 +34,7 @@ builder.Services.AddMongoDbContext(configuration); builder.Services.AddPersistMessage(configuration); builder.AddCustomSerilog(); -builder.Services.AddCore(); +builder.Services.AddCore(configuration); builder.Services.AddJwt(); builder.Services.AddControllers(); builder.Services.AddCustomSwagger(configuration, typeof(PassengerRoot).Assembly); diff --git a/src/Services/Passenger/src/Passenger/Extensions/CoreExtensions.cs b/src/Services/Passenger/src/Passenger/Extensions/CoreExtensions.cs index d6e756d..349c32d 100644 --- a/src/Services/Passenger/src/Passenger/Extensions/CoreExtensions.cs +++ b/src/Services/Passenger/src/Passenger/Extensions/CoreExtensions.cs @@ -1,13 +1,21 @@ using BuildingBlocks.Core; using BuildingBlocks.Utils; +using BuildingBlocks.Web; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Passenger.Extensions; public static class CoreExtensions { - public static IServiceCollection AddCore(this IServiceCollection services) + public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration) { + configuration.GetSection(nameof(AppOptions)).Bind(nameof(AppOptions)); + + services.AddOptions() + .Bind(configuration.GetSection(nameof(AppOptions))) + .ValidateDataAnnotations(); + services.AddScoped(); services.AddTransient(); services.AddScoped(); diff --git a/src/Services/Passenger/src/Passenger/Identity/RegisterNewUser/RegisterNewUserConsumerHandler.cs b/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs similarity index 64% rename from src/Services/Passenger/src/Passenger/Identity/RegisterNewUser/RegisterNewUserConsumerHandler.cs rename to src/Services/Passenger/src/Passenger/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs index b9c519d..912aa6d 100644 --- a/src/Services/Passenger/src/Passenger/Identity/RegisterNewUser/RegisterNewUserConsumerHandler.cs +++ b/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisterNewUser/RegisterNewUserConsumerHandler.cs @@ -3,30 +3,43 @@ using BuildingBlocks.Contracts.EventBus.Messages; using BuildingBlocks.Core; using BuildingBlocks.Core.Event; using BuildingBlocks.IdsGenerator; +using BuildingBlocks.Web; +using Humanizer; using MassTransit; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Passenger.Data; using Passenger.Passengers.Events.Domain; -namespace Passenger.Identity.RegisterNewUser; +namespace Passenger.Identity.Consumers.RegisterNewUser; public class RegisterNewUserConsumerHandler : IConsumer { private readonly PassengerDbContext _passengerDbContext; private readonly IEventDispatcher _eventDispatcher; + private readonly ILogger _logger; + private readonly AppOptions _options; public RegisterNewUserConsumerHandler(PassengerDbContext passengerDbContext, - IEventDispatcher eventDispatcher) + IEventDispatcher eventDispatcher, + ILogger logger, + IOptions options) { _passengerDbContext = passengerDbContext; _eventDispatcher = eventDispatcher; + _logger = logger; + _options = options.Value; } public async Task Consume(ConsumeContext context) { Guard.Against.Null(context.Message, nameof(UserCreated)); - var passengerExist = await _passengerDbContext.Passengers.AnyAsync(x => x.PassportNumber == context.Message.PassportNumber); + _logger.LogInformation($"consumer for {nameof(UserCreated).Underscore()} in {_options.Name}"); + + var passengerExist = + await _passengerDbContext.Passengers.AnyAsync(x => x.PassportNumber == context.Message.PassportNumber); if (passengerExist) return; diff --git a/src/Services/Passenger/src/Passenger/Passenger.csproj b/src/Services/Passenger/src/Passenger/Passenger.csproj index 1cd1e12..24f41b5 100644 --- a/src/Services/Passenger/src/Passenger/Passenger.csproj +++ b/src/Services/Passenger/src/Passenger/Passenger.csproj @@ -14,6 +14,7 @@ +