예제 #1
0
        /// <summary>
        ///     Инициализирует новый экземпляр класса <see cref="QueueRabbitMq" />
        /// </summary>
        /// <param name="factory">Фабрика подключения</param>
        /// <param name="config">Конфигурация</param>
        /// <param name="serializer">Сериализатор</param>
        /// <param name="logger">Логировщик</param>
        public QueueRabbitMq(
            ConnectionFactory factory,
            IConfigurationRabbitMq config,
            ISerializer serializer,
            ILogger logger)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            this._factory    = factory;
            this._logger     = logger;
            this._serializer = serializer;

            this._config = config;

            this._connection = this.Connect();

            this._channel = this.GetСhannel(this._connection);
        }
예제 #2
0
        /// <summary>
        ///     Установить соединение
        /// </summary>
        /// <param name="factory">Фабрика соединений</param>
        /// <param name="config">Конфигурация</param>
        /// <returns>Установленное соединение</returns>
        private IConnection TryToConnect(ConnectionFactory factory, IConfigurationRabbitMq config)
        {
            if (this._disposed)
            {
                return(null);
            }

            factory.HostName = string.IsNullOrEmpty(config.HostName) ? "localhost" : config.HostName;
            factory.UserName = string.IsNullOrEmpty(config.UserName) ? "guest" : config.UserName;
            factory.Password = string.IsNullOrEmpty(config.Password) ? "guest" : config.Password;

            this._logger.Debug($"Начинаем устанавливать соединение к {config.HostName}");

            IConnection connection = null;

            do
            {
                try
                {
                    connection = factory.CreateConnection();
                }
                catch (Exception e)
                {
                    this._logger.Error($"Ошибка соединения к {config.HostName}", e);

                    // Соединение не удалось делаем паузу
                    Thread.Sleep(this._config.ReconnectInterval);
                }
            }while (connection == null || !connection.IsOpen);

            this._logger.Debug($"Соединение к {config.HostName} установлено.");

            return(connection);
        }