Пример #1
0
        public static async Task Main(string[] args)
        {
            var builder = new HostBuilder();

            var environmentConfiguration = new ConfigurationBuilder()
                                           .AddEnvironmentVariables()
                                           .Build();

            var environmentName = environmentConfiguration["ASPNETCORE_ENVIRONMENT"];

            _configuration = new ConfigurationBuilder()
                             .SetBasePath(Path.Combine(AppContext.BaseDirectory))
                             .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                             .AddJsonFile($"appsettings.{environmentName}.json", true, false)
                             .AddEnvironmentVariables()
                             .AddCommandLine(args)
                             .Build();

            builder
            .ConfigureServices(services =>
            {
                var rabbitMqSettings = _configuration.GetSection("RabbitMQSettings");

                ConfigureSerilog(services);

                services.AddMediatR(typeof(MessageEventHandler));

                services.AddScoped <IRequestHandler <MessageEvent>, MessageEventHandler>();
                services.AddScoped <IHandler, Handler>();
                services.AddSingleton <IMemorySubscriptionManager, MemorySubscriptionManager>();
                services.AddSingleton <IMessageIntegrationEventService, MessageIntegrationEventService>();

                services.AddSingleton <IRabbitMqConnection>(i =>
                                                            new RabbitMqConnection(rabbitMqSettings["RabbitMqHost"], rabbitMqSettings["RabbitMqUser"],
                                                                                   rabbitMqSettings["RabbitMqPassword"], rabbitMqSettings["RabbitMqRetryAttempts"]));

                services.AddScoped <MessageEventHandler>();
                services.AddSingleton <IEventBusRabbitMq, EventBusRabbitMq>(serviceProvider =>
                {
                    var integration = new EventBusRabbitMq(serviceProvider, ApplicationName, rabbitMqSettings["RabbitMqQueueName"], rabbitMqSettings["RabbitMqExchangeName"], rabbitMqSettings["RabbitMqExchangeType"]);

                    integration.Subscribe <MessageEvent, MessageEventHandler>();

                    return(integration);
                });

                services.AddHostedService <Functions>();
            });

            var host = builder
                       .UseConsoleLifetime()
                       .Build();

            using (host)
            {
                await host.RunAsync();
            }
        }
        public static IServiceCollection AddEventBus(this IServiceCollection services, IConfiguration configuration)
        {
            services.AddSingleton <IEventBus, EventBusRabbitMq>(s =>
            {
                var serviceBusConnection = s.GetRequiredService <IRabbitMqPersistentConnection>();
                var iLifetimeScope       = s.GetRequiredService <ILifetimeScope>();
                var logger = s.GetRequiredService <ILogger <EventBusRabbitMq> >();
                var subscriptionsManager = s.GetRequiredService <IEventBusSubscriptionsManager>();

                var eventBus = new EventBusRabbitMq(serviceBusConnection, logger, subscriptionsManager, iLifetimeScope, "pong_queue", 5);

                return(eventBus);
            });

            services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();

            services.AddTransient <PingerBouncedBallEventHandler>();

            return(services);
        }