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); }
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()); }); }
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(); }