// 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);
                });
            });
        }
Esempio n. 2
0
        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;
 }
Esempio n. 4
0
 public OrderStateDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
 public DispatchIdentificationConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
 public VoidOrderItemConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
Esempio n. 7
0
 public DispatchCancellationConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
 public PrepareOrderConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
 public OrderNotFoundConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
 public OrderDeliveryConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
Esempio n. 11
0
 public DispatchDeclinedConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
Esempio n. 12
0
 public EnRouteToRestaurantConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }
Esempio n. 13
0
 public CancelOrderConsumerDefinition(RabbitMqTransportSettings settings)
 {
     _settings = settings;
 }