protected override async Task ExecuteAsync(CancellationToken stoppingToken) { try { while (true) { if (!_connection.IsOpen) { _connection.Close(); _channel.Close(); Console.WriteLine("Not connected to RabbitMQ"); _connection = _factory.CreateConnection(); _channel = _connection.CreateModel(); _channel.AddChannels(); RabbitMQExtensions.EnsureExistRabbitMqVirtualHost(_configurations, _connection); } else { Console.WriteLine("Connected to RabbitMQ..."); } await Task.Delay(2000); } } catch { _stoppingCts = new CancellationTokenSource(); await ExecuteAsync(_stoppingCts.Token); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSingleton <IConfiguration> (Configuration); var rabbitMQConfigurations = new RabbitMQConfigurations(); new ConfigureFromConfigurationOptions <RabbitMQConfigurations>( Configuration.GetSection("RabbitMQConfigurations")) .Configure(rabbitMQConfigurations); var factory = new ConnectionFactory() { HostName = rabbitMQConfigurations.HostName, Port = rabbitMQConfigurations.Port, UserName = rabbitMQConfigurations.UserName, Password = rabbitMQConfigurations.Password, VirtualHost = rabbitMQConfigurations.VirtualHost }; services.AddSingleton(factory); var connection = factory.CreateConnection(); RabbitMQExtensions.EnsureExistRabbitMqVirtualHost(rabbitMQConfigurations, connection); var channel = connection.CreateModel(); services.AddScopedServices(); services.AddTransientServices(); services.AddSingletonServices(ServiceProvider); channel.AddChannels(); channel.ConfirmSelect(); services.AddSingleton(rabbitMQConfigurations); services.AddLogging(); services.AddSingleton(channel); services.AddSingleton(connection); }