/// <summary> /// Specify a concurrency limit for tasks executing through the filter. No more than the specified /// number of tasks will be allowed to execute concurrently. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="configurator"></param> /// <param name="concurrencyLimit">The concurrency limit for the subsequent filters in the pipeline</param> /// <param name="managementEndpointConfigurator">A management endpoint configurator to support runtime adjustment</param> /// <param name="id">An identifier for the concurrency limit to allow selective adjustment</param> public static void UseConcurrencyLimit <T>(this IPipeConfigurator <T> configurator, int concurrencyLimit, IManagementEndpointConfigurator managementEndpointConfigurator = null, string id = null) where T : class, PipeContext { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var specification = managementEndpointConfigurator != null ? new ConcurrencyLimitPipeSpecification <T>(concurrencyLimit, managementEndpointConfigurator, id) : new ConcurrencyLimitPipeSpecification <T>(concurrencyLimit); configurator.AddPipeSpecification(specification); }
/// <summary> /// Limits the number of concurrent messages consumed on the receive endpoint, regardless of message type. /// </summary> /// <param name="configurator"></param> /// <param name="concurrentMessageLimit">The concurrency limit for the subsequent filters in the pipeline</param> /// <param name="managementEndpointConfigurator">A management endpoint configurator to support runtime adjustment</param> /// <param name="id">An identifier for the concurrency limit to allow selective adjustment</param> public static void UseConcurrencyLimit(this IConsumePipeConfigurator configurator, int concurrentMessageLimit, IManagementEndpointConfigurator managementEndpointConfigurator, string id = default) { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var observer = new ConcurrencyLimitConfigurationObserver(configurator, concurrentMessageLimit, id); managementEndpointConfigurator.Instance(observer.Limiter, x => { x.UseConcurrentMessageLimit(1); x.Message <SetConcurrencyLimit>(m => m.UseRetry(r => r.None())); }); }
/// <summary> /// Specify a concurrency limit for tasks executing through the filter. No more than the specified /// number of tasks will be allowed to execute concurrently. /// </summary> /// <param name="configurator"></param> /// <param name="concurrencyLimit">The concurrency limit for the subsequent filters in the pipeline</param> /// <param name="managementEndpointConfigurator">A management endpoint configurator to support runtime adjustment</param> /// <param name="id">An identifier for the concurrency limit to allow selective adjustment</param> public static void UseConcurrencyLimit(this IConsumePipeConfigurator configurator, int concurrencyLimit, IManagementEndpointConfigurator managementEndpointConfigurator, string id = null) { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } if (managementEndpointConfigurator != null) { configurator.AddPrePipeSpecification(new ConcurrencyLimitPipeSpecification <ConsumeContext>(concurrencyLimit, managementEndpointConfigurator, id)); } else { configurator.AddPrePipeSpecification(new ConcurrencyLimitPipeSpecification <ConsumeContext>(concurrencyLimit)); } }
/// <summary> /// Limits the number of concurrent messages consumed by the saga, regardless of message type. /// </summary> /// <param name="configurator"></param> /// <param name="concurrentMessageLimit">The concurrent message limit for all message types for the saga</param> /// <param name="managementEndpointConfigurator">A management endpoint configurator to support runtime adjustment</param> /// <param name="id">An identifier for the concurrency limit to allow selective adjustment</param> public static void UseConcurrentMessageLimit <TSaga>(this ISagaConfigurator <TSaga> configurator, int concurrentMessageLimit, IManagementEndpointConfigurator managementEndpointConfigurator, string id = null) where TSaga : class, ISaga { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var observer = new ConcurrencyLimitSagaConfigurationObserver <TSaga>(configurator, concurrentMessageLimit, id); configurator.ConnectSagaConfigurationObserver(observer); managementEndpointConfigurator.Instance(observer.Limiter, x => { x.UseConcurrentMessageLimit(1); x.Message <SetConcurrencyLimit>(m => m.UseRetry(r => r.None())); }); }
/// <summary> /// Limits the number of concurrent messages consumed for the specified message type. /// </summary> /// <param name="configurator"></param> /// <param name="concurrentMessageLimit">The concurrent message limit for the message type</param> /// <param name="managementEndpointConfigurator">A management endpoint configurator to support runtime adjustment</param> /// <param name="id">An identifier for the concurrency limit to allow selective adjustment</param> public static void UseConcurrentMessageLimit <TMessage>(this IPipeConfigurator <ConsumeContext <TMessage> > configurator, int concurrentMessageLimit, IManagementEndpointConfigurator managementEndpointConfigurator, string id = null) where TMessage : class { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var limiter = new ConcurrencyLimiter(concurrentMessageLimit, id); var specification = new ConcurrencyLimitConsumePipeSpecification <TMessage>(limiter); configurator.AddPipeSpecification(specification); managementEndpointConfigurator.Instance(limiter, x => { x.UseConcurrentMessageLimit(1); x.Message <SetConcurrencyLimit>(m => m.UseRetry(r => r.None())); }); }
protected override void ConfigureBusHost(IRabbitMqBusFactoryConfigurator configurator, IRabbitMqHost host) { _management = configurator.ManagementEndpoint(host); }
public void ConnectManagementEndpoint(IManagementEndpointConfigurator management) { var consumer = new SetPrefetchCountManagementConsumer(_mediator, _settings.QueueName); management.Instance(consumer); }
protected override void ConfigureInMemoryBus(IInMemoryBusFactoryConfigurator configurator) { _management = configurator.ManagementEndpoint(); base.ConfigureInMemoryBus(configurator); }
protected override void ConfigureBusHost(IRabbitMqBusFactoryConfigurator configurator, IRabbitMqHost host) { _management = configurator.ManagementEndpoint(host); }
public ConcurrencyLimitPipeSpecification(int concurrencyLimit, IManagementEndpointConfigurator configurator, string id = null) : this(concurrencyLimit) { var consumer = new ConcurrencyLimitFilterManagementConsumer(_mediator, id); configurator.Instance(consumer); }
protected override void ConfigureRabbitMqBusHost(IRabbitMqBusFactoryConfigurator configurator, IRabbitMqHost host) { _management = configurator.ManagementEndpoint(host); _consumerA = RabbitMqTestHarness.Consumer <TestConsumer>(); }
protected override void ConfigureBus(IInMemoryBusFactoryConfigurator configurator) { _management = configurator.ManagementEndpoint(); base.ConfigureBus(configurator); }
public void ConnectManagementEndpoint(IManagementEndpointConfigurator management) { var consumer = new SetPrefetchCountManagementConsumer(_mediator, _settings.QueueName); management.Instance(consumer); }