/// <summary> /// Create channel /// </summary> /// <param name="configuration">Base configuration</param> /// <returns>Fresh channel</returns> private IModel DeclareChannel(RabbitConfigurationBase configuration) { // Connection to rabbit var factory = new ConnectionFactory { NetworkRecoveryInterval = TimeSpan.FromSeconds(120), AutomaticRecoveryEnabled = true, TopologyRecoveryEnabled = true }; // Configuring virtual host if (!string.IsNullOrWhiteSpace(configuration.VirtualHost)) { factory.VirtualHost = configuration.VirtualHost; } // Configuring port if (configuration.Port > 0) { factory.Port = configuration.Port; } // Configuring user if (!string.IsNullOrWhiteSpace(configuration.User)) { factory.UserName = configuration.User; } // Configuring password if (!string.IsNullOrWhiteSpace(configuration.Password)) { factory.Password = configuration.Password; } // Retunring the factory return(factory.CreateConnection(configuration.Hosts) .CreateModel()); }
/// <summary> /// Convert base to <see cref="RabbitConsumerConfiguration"/> /// </summary> /// <param name="configuration">Base configuration</param> /// <param name="name">Name of the exchange/queue<</param> /// <param name="workers">Consumer workers count</param> /// <param name="batchSize">Grouping size for messages</param> /// <param name="retryIntervals">Retry intervals in milliseconds</param> /// <param name="dependencies">Dependencies <see cref="RabbitConfigurationDependency"/></param> /// <returns>Fresh instance of <see cref="RabbitConsumerConfiguration"/></returns> internal static RabbitConsumerConfiguration ToConsumerConfiguration( RabbitConfigurationBase configuration, string name, ushort workers = 0, ushort batchSize = 0, List <ulong> retryIntervals = null, List <RabbitConfigurationDependency> dependencies = null ) { // Composing consumer configuration return(new RabbitConsumerConfiguration { Hosts = configuration.Hosts, VirtualHost = configuration.VirtualHost, Port = configuration.Port, User = configuration.User, Password = configuration.Password, Arguments = configuration.Arguments, Name = name, Workers = workers, BatchSize = batchSize, RetryIntervals = retryIntervals, Dependencies = dependencies }); }
/// <summary> /// Constructor /// </summary> /// <param name="configuration">Base configuration</param> /// <param name="logger">Logger</param> /// <param name="name">Name of the exchange/queue</param> /// <param name="type">Type of the publisher exchange</param> /// <param name="headers">Publish headers</param> /// <param name="dependencies">Dependencies <see cref="RabbitConfigurationDependency"/></param> public RabbitPublisher( RabbitConfigurationBase configuration, ILogger logger = null, string name = null, string type = null, Dictionary <string, object> headers = null, List <RabbitConfigurationDependency> dependencies = null ) : this( RabbitConfigurationBase.ToPublisherConfiguration(configuration, name, type, headers, dependencies), logger ) { }
/// <summary> /// Constructor /// </summary> /// <param name="configuration">Configuration base</param> /// <param name="logger">Logger</param> /// <param name="name">Name of the exchange/queue<</param> /// <param name="workers">Consumer workers count</param> /// <param name="batchSize">Grouping size for messages</param> /// <param name="retryIntervals">Retry intervals in milliseconds</param> /// <param name="dependencies">Dependencies <see cref="RabbitConfigurationDependency"/></param> public RabbitConsumer( RabbitConfigurationBase configuration, ILogger logger = null, string name = null, ushort workers = 0, ushort batchSize = 0, List <ulong> retryIntervals = null, List <RabbitConfigurationDependency> dependencies = null ) : this( RabbitConfigurationBase.ToConsumerConfiguration(configuration, name, workers, batchSize, retryIntervals, dependencies), logger ) { }
/// <summary> /// Convert base to <see cref="RabbitPublisherConfiguration"/> /// </summary> /// <param name="configuration">Base configuration</param> /// <param name="name">Name of the exchange/queue</param> /// <param name="type">Type of the publisher exchange</param> /// <param name="headers">Publish headers</param> /// <param name="dependencies">Dependencies <see cref="RabbitConfigurationDependency"/></param> /// <returns>Fresh instance of <see cref="RabbitPublisherConfiguration"/></returns> internal static RabbitPublisherConfiguration ToPublisherConfiguration( RabbitConfigurationBase configuration, string name = null, string type = null, Dictionary <string, object> headers = null, List <RabbitConfigurationDependency> dependencies = null ) { // Composing publisher configuration return(new RabbitPublisherConfiguration { Hosts = configuration.Hosts, VirtualHost = configuration.VirtualHost, Port = configuration.Port, User = configuration.User, Password = configuration.Password, Arguments = configuration.Arguments, Name = name, Type = type, Headers = headers, Dependencies = dependencies }); }
/// <summary> /// Base constructor /// </summary> /// <param name="configuration">Base configuration</param> /// <param name="logger">Logger</param> private RabbitBase(RabbitConfigurationBase configuration, ILogger logger = null) { // ... Logger = logger; Channels = new List <IModel> { }; if (configuration.Arguments != null) { Arguments = configuration.Arguments; } // Base fixings configuration.Dependencies ??= new List <RabbitConfigurationDependency> { }; // Base validations var invalid = configuration == null ? "Configuration" : configuration.Hosts == null || configuration.Hosts.Count == 0 ? "Hosts" : string.IsNullOrWhiteSpace(configuration.Name) ? "Name" : string.Empty; if (!string.IsNullOrWhiteSpace(invalid)) { throw new ArgumentException(RabbitAnnotations.Exception.FactoryArgumentExceptionGeneral, invalid); } }