public static IServiceCollection AddRabbitMQ(this IServiceCollection services, Action <RabbitMQSubscriptionBuilder> builderAction)
        {
            var builder = new RabbitMQSubscriptionBuilder();

            builderAction(builder);

            services.AddSingleton <IRabbitMQMessenger>(serviceProvider =>
            {
                var logger            = serviceProvider.GetRequiredService <ILogger <PersistentRabbitMQConnection> >();
                var settings          = serviceProvider.GetRequiredService <IOptions <RabbitMQSettings> >().Value;
                var connectionFactory = new ConnectionFactory
                {
                    HostName    = settings.ServerName ?? "localhost",
                    Password    = settings.Password,
                    UserName    = settings.UserName,
                    VirtualHost = settings.VirtualHost ?? "/",
                    Port        = settings.Port ?? 5672
                };
                var connection = new PersistentRabbitMQConnection(connectionFactory, logger);

                var exchangeName  = settings.ExchangeName ?? "RabbitMQMessenger";
                var queueName     = settings.QueueName ?? Assembly.GetEntryAssembly().GetName().Name;
                var delayQueuName = settings.DelayQueueName ?? Assembly.GetEntryAssembly().GetName().Name;
                return(new RabbitMQMessenger(connection, builder, logger, exchangeName, queueName));
            });

            //  services.AddSingleton<IHostedService, RabbitMQHostedService>();
            return(services);
        }
Ejemplo n.º 2
0
 public RabbitMQBasicConsumer(RabbitMQSubscriptionBuilder builder, ILogger logger, IModel model)
     : base(model)
 {
     _builder     = builder;
     _logger      = logger;
     _retryPolicy = Policy.Handle <SocketException>()
                    .Or <OperationInterruptedException>()
                    .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) =>
     {
         _logger.LogWarning(ex.ToString());
     });
 }
Ejemplo n.º 3
0
        public RabbitMQMessenger(
            IPersistentRabbitMQConnection connection,
            RabbitMQSubscriptionBuilder builder,
            ILogger logger,
            string exchangeName,
            string queueName)
        {
            Guard.ArgumentNotNull(nameof(connection), connection);
            Guard.ArgumentNotNull(nameof(builder), builder);
            Guard.ArgumentNotNull(nameof(logger), logger);
            Guard.ArgumentNotNullOrEmpty(nameof(exchangeName), exchangeName);
            Guard.ArgumentNotNullOrEmpty(nameof(queueName), queueName);

            _connection   = connection;
            _builder      = builder;
            _logger       = logger;
            _exchangeName = exchangeName;
            _queueName    = queueName;
            _model        = CreateModel();
        }