// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "CourierWebService", Version = "v1" }); }); services.AddSingleton(x => { var config = new RabbitMqTransportSettings(); Configuration.Bind("RabbitMqTransport", config); return(config); }); services.AddDbContext <OrdersDbContext>(x => x.UseNpgsql(Configuration.GetConnectionString("OrdersConnection"))); services.AddMassTransit(x => { x.SetKebabCaseEndpointNameFormatter(); x.UsingRabbitMq((context, cfg) => { var settings = context.GetService <RabbitMqTransportSettings>(); cfg.Host(settings.Host, settings.VirtualHost, h => { h.Username(settings.Username); h.Password(settings.Password); }); cfg.ConfigureEndpoints(context); }); }); }
static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder() .UseSerilog((host, log) => { string appBin = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); log.MinimumLevel.Information(); log.MinimumLevel.Override("Microsoft", LogEventLevel.Warning); log.WriteTo.File($"{appBin}/log/log-{DateTime.Now:yyMMdd_HHmmss}.txt"); log.WriteTo.Console(LogEventLevel.Debug); }) .ConfigureAppConfiguration((host, config) => { config.Sources.Clear(); config.AddJsonFile("appsettings.json", false); }) .ConfigureServices((host, services) => { services.AddSingleton <IGrpcClient <ICourierDispatcher>, CourierDispatcherClient>(); services.AddSingleton(x => { var config = new GrpcClientSettings(); host.Configuration.Bind("Grpc", config); return(config); }); services.AddSingleton(x => { var config = new RabbitMqTransportSettings(); host.Configuration.Bind("RabbitMqTransport", config); return(config); }); services.AddSingleton(x => { var config = new CourierServiceSettings(); host.Configuration.Bind("Application", config); return(config); }); services.AddMassTransit(x => { x.SetKebabCaseEndpointNameFormatter(); x.AddConsumer(typeof(DispatchConsumer), typeof(DispatchConsumerDefinition)); x.AddConsumer(typeof(DispatchConfirmationConsumer), typeof(DispatchConfirmationConsumerDefinition)); x.AddConsumer(typeof(OrderDeliveryConsumer), typeof(OrderDeliveryConsumerDefinition)); x.AddConsumer(typeof(PickUpOrderConsumer), typeof(PickUpOrderConsumerDefinition)); x.AddConsumer(typeof(EnRouteToRestaurantConsumer), typeof(EnRouteToRestaurantConsumerDefinition)); x.AddConsumer(typeof(DispatchDeclinedConsumer), typeof(DispatchDeclinedConsumerDefinition)); x.AddConsumer(typeof(EnRouteToCustomerConsumer), typeof(EnRouteToCustomerConsumerDefinition)); x.AddConsumer(typeof(DispatchIdentificationConsumer), typeof(DispatchIdentificationConsumerDefinition)); x.AddConsumer(typeof(DispatchCancellationConsumer), typeof(DispatchCancellationConsumerDefinition)); x.AddSagaStateMachine(typeof(CourierStateMachine), typeof(CourierStateDefinition)); Uri schedulerEndpoint = new Uri("queue:quartz"); x.AddMessageScheduler(schedulerEndpoint); x.UsingRabbitMq((context, cfg) => { var settings = context.GetService <RabbitMqTransportSettings>(); cfg.Host(settings.Host, settings.VirtualHost, h => { h.Username(settings.Username); h.Password(settings.Password); }); cfg.UseMessageScheduler(schedulerEndpoint); cfg.ConfigureEndpoints(context); // cfg.UseMessageRetry(x => x.SetRetryPolicy(new RetryPolicyFactory())); }); x.AddSagaStateMachine <CourierStateMachine, CourierState>() .EntityFrameworkRepository(r => { r.ConcurrencyMode = ConcurrencyMode.Optimistic; r.AddDbContext <DbContext, CourierServiceDbContext>((provider, builder) => { builder.UseNpgsql(host.Configuration.GetConnectionString("OrdersConnection"), m => { m.MigrationsAssembly(Assembly.GetExecutingAssembly().GetName().Name); m.MigrationsHistoryTable($"__{nameof(CourierServiceDbContext)}"); }); }); }); }); services.AddMassTransitHostedService(); });
public EnRouteToCustomerConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public OrderStateDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public DispatchIdentificationConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public VoidOrderItemConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public DispatchCancellationConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public PrepareOrderConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public OrderNotFoundConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public OrderDeliveryConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public DispatchDeclinedConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public EnRouteToRestaurantConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }
public CancelOrderConsumerDefinition(RabbitMqTransportSettings settings) { _settings = settings; }