/// <summary> /// /// </summary> /// <param name="logger"></param> /// <param name="options"></param> /// <param name="subscriptionsManager"></param> /// <param name="serviceProvider"></param> /// <param name="persistentConnection"></param> public RabbitMQEventBus( ILogger <RabbitMQEventBus> logger, IOptions <RabbitMQSettings> options, ISubscriptionsManager subscriptionsManager, IServiceProvider serviceProvider, IRabbitMQPersistentConnection persistentConnection) { this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); this.settings = options?.Value ?? throw new ArgumentNullException(nameof(options)); this.subscriptionsManager = subscriptionsManager ?? new InMemorySubscriptionsManager(); this.serviceProvider = serviceProvider; this.connection = persistentConnection ?? throw new ArgumentNullException(nameof(persistentConnection)); this.policy = Policy .Handle <BrokerUnreachableException>() .Or <SocketException>() .WaitAndRetry(settings.RetryCountWhenPublishEvent, retryAttempt => TimeSpan.FromSeconds(1), (exception, time) => { logger.LogWarning(exception.ToString()); }); this.subscriptionsManager.OnEventRemoved += SubscriptionsManager_OnEventRemoved; DoConsume(); }