/// <summary>Initializes a new instance of the <see cref="RedisQueueMonitor"/> class.</summary>
 /// <param name="clearMessagesFactory">The clear messages factory.</param>
 /// <param name="heartBeatFactory">The heart beat factory.</param>
 /// <param name="delayedProcessing">The delayed processing.</param>
 /// <param name="clearErrorMessagesMonitor">clears error messages from the queue</param>
 public RedisQueueMonitor(IClearExpiredMessagesMonitor clearMessagesFactory,
                          IHeartBeatMonitor heartBeatFactory,
                          IDelayedProcessingMonitor delayedProcessing,
                          IClearErrorMessagesMonitor clearErrorMessagesMonitor)
 {
     Guard.NotNull(() => clearMessagesFactory, clearMessagesFactory);
     Guard.NotNull(() => heartBeatFactory, heartBeatFactory);
     Guard.NotNull(() => clearErrorMessagesMonitor, clearErrorMessagesMonitor);
     _heartBeatFactory     = heartBeatFactory;
     _clearMessagesFactory = clearMessagesFactory;
     _delayedProcessing    = delayedProcessing;
     _clearErrorMessages   = clearErrorMessagesMonitor;
     _monitors             = new List <IMonitor>(4);
 }
        /// <summary>Initializes a new instance of the <see cref="QueueMonitor"/> class.</summary>
        /// <param name="clearMessagesFactory">The clear messages factory.</param>
        /// <param name="heartBeatFactory">The heart beat factory.</param>
        /// <param name="heartBeatConfiguration">The heart beat configuration.</param>
        /// <param name="expirationConfiguration">The expiration configuration.</param>
        /// <param name="clearErrorMessagesMonitor">clears error messages from the queue</param>
        /// <param name="clearMessageErrorConfiguration">Configuration for clearing error messages</param>
        public QueueMonitor(IClearExpiredMessagesMonitor clearMessagesFactory,
                            IHeartBeatMonitor heartBeatFactory,
                            IHeartBeatConfiguration heartBeatConfiguration,
                            IMessageExpirationConfiguration expirationConfiguration,
                            IClearErrorMessagesMonitor clearErrorMessagesMonitor,
                            IMessageErrorConfiguration clearMessageErrorConfiguration)
        {
            Guard.NotNull(() => clearMessagesFactory, clearMessagesFactory);
            Guard.NotNull(() => heartBeatFactory, heartBeatFactory);
            Guard.NotNull(() => heartBeatConfiguration, heartBeatConfiguration);
            Guard.NotNull(() => expirationConfiguration, expirationConfiguration);
            Guard.NotNull(() => clearErrorMessagesMonitor, clearErrorMessagesMonitor);
            Guard.NotNull(() => clearMessageErrorConfiguration, clearMessageErrorConfiguration);

            _heartBeatConfiguration         = heartBeatConfiguration;
            _heartBeatFactory               = heartBeatFactory;
            _clearMessagesFactory           = clearMessagesFactory;
            _expirationConfiguration        = expirationConfiguration;
            _clearErrorMessages             = clearErrorMessagesMonitor;
            _clearMessageErrorConfiguration = clearMessageErrorConfiguration;
            _monitors = new List <IMonitor>(3);
        }