public Task StartReceive(CancellationToken cancellationToken = default) { messagePumpCancellationTokenSource = new CancellationTokenSource(); messageProcessingCancellationTokenSource = new CancellationTokenSource(); circuitBreaker = new MessagePumpConnectionFailedCircuitBreaker( $"'{settings.ReceiveAddress} MessagePump'", timeToWaitBeforeTriggeringCircuitBreaker, (message, exception) => criticalErrorAction(message, exception, messageProcessingCancellationTokenSource.Token)); connection = connectionFactory.CreateConnection($"{settings.ReceiveAddress} MessagePump", consumerDispatchConcurrency: maxConcurrency); var channel = connection.CreateModel(); var prefetchCount = prefetchCountCalculation(maxConcurrency); if (prefetchCount < maxConcurrency) { Logger.Warn($"The specified prefetch count '{prefetchCount}' is smaller than the specified maximum concurrency '{maxConcurrency}'. The maximum concurrency value will be used as the prefetch count instead."); prefetchCount = maxConcurrency; } channel.BasicQos(0, (ushort)Math.Min(prefetchCount, ushort.MaxValue), false); consumer = new AsyncEventingBasicConsumer(channel); consumer.Registered += Consumer_Registered; connection.ConnectionShutdown += Connection_ConnectionShutdown; consumer.Received += Consumer_Received; channel.BasicConsume(settings.ReceiveAddress, false, consumerTag, consumer); return(Task.CompletedTask); }
public Task StartReceive(CancellationToken cancellationToken = default) { messagePumpCancellationTokenSource = new CancellationTokenSource(); messageProcessingCancellationTokenSource = new CancellationTokenSource(); circuitBreaker = new MessagePumpConnectionFailedCircuitBreaker( name, timeToWaitBeforeTriggeringCircuitBreaker, (message, exception) => criticalErrorAction(message, exception, messageProcessingCancellationTokenSource.Token)); ConnectToBroker(); return(Task.CompletedTask); }
public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings) { this.onMessage = onMessage; this.onError = onError; this.settings = settings; this.criticalError = criticalError; circuitBreaker = new MessagePumpConnectionFailedCircuitBreaker($"'{settings.InputQueue} MessagePump'", timeToWaitBeforeTriggeringCircuitBreaker, criticalError); if (settings.PurgeOnStartup) { queuePurger.Purge(settings.InputQueue); } return(Task.CompletedTask); }