Ejemplo n.º 1
0
        /// <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();
        }