public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings) { peekCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqPeek", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to peek " + settings.InputQueue, ex)); receiveCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqReceive", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to receive from " + settings.InputQueue, ex)); var inputAddress = MsmqAddress.Parse(settings.InputQueue); var errorAddress = MsmqAddress.Parse(settings.ErrorQueue); if (!string.Equals(inputAddress.Machine, RuntimeEnvironment.MachineName, StringComparison.OrdinalIgnoreCase)) { throw new Exception($"MSMQ Dequeuing can only run against the local machine. Invalid inputQueue name '{settings.InputQueue}'."); } inputQueue = new MessageQueue(inputAddress.FullPath, false, true, QueueAccessMode.Receive); errorQueue = new MessageQueue(errorAddress.FullPath, false, true, QueueAccessMode.Send); if (settings.RequiredTransactionMode != TransportTransactionMode.None && !QueueIsTransactional()) { throw new ArgumentException($"Queue must be transactional if you configure the endpoint to be transactional ({settings.InputQueue})."); } inputQueue.MessageReadPropertyFilter = DefaultReadPropertyFilter; if (settings.PurgeOnStartup) { inputQueue.Purge(); } receiveStrategy = receiveStrategyFactory(settings.RequiredTransactionMode); receiveStrategy.Init(inputQueue, errorQueue, onMessage, onError, criticalError); return(TaskEx.CompletedTask); }
public Task Init(Func<MessageContext, Task> onMessage, Func<ErrorContext, Task<ErrorHandleResult>> onError, CriticalError criticalError, PushSettings settings) { peekCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqPeek", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to peek " + settings.InputQueue, ex)); receiveCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqReceive", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to receive from " + settings.InputQueue, ex)); var inputAddress = MsmqAddress.Parse(settings.InputQueue); var errorAddress = MsmqAddress.Parse(settings.ErrorQueue); if (!string.Equals(inputAddress.Machine, RuntimeEnvironment.MachineName, StringComparison.OrdinalIgnoreCase)) { throw new Exception($"MSMQ Dequeuing can only run against the local machine. Invalid inputQueue name '{settings.InputQueue}'."); } inputQueue = new MessageQueue(inputAddress.FullPath, false, true, QueueAccessMode.Receive); errorQueue = new MessageQueue(errorAddress.FullPath, false, true, QueueAccessMode.Send); if (settings.RequiredTransactionMode != TransportTransactionMode.None && !QueueIsTransactional()) { throw new ArgumentException($"Queue must be transactional if you configure the endpoint to be transactional ({settings.InputQueue})."); } inputQueue.MessageReadPropertyFilter = DefaultReadPropertyFilter; if (settings.PurgeOnStartup) { inputQueue.Purge(); } receiveStrategy = receiveStrategyFactory(settings.RequiredTransactionMode); receiveStrategy.Init(inputQueue, errorQueue, onMessage, onError, criticalError); return TaskEx.CompletedTask; }
public async Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings) { pipeline = onMessage; this.onError = onError; inputQueue = settings.InputQueue; receiveCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("EventStoreReceive", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to receive from " + settings.InputQueue, ex)); this.criticalError = criticalError; if (settings.PurgeOnStartup) { //inputQueue.Purge(); } await connection.ConnectAsync().ConfigureAwait(false); await onStart(criticalError).ConfigureAwait(false); }
public ExchangeMonitor(IEventStoreConnection connection, Action <ExchangeDataCollection> newVersionDetectedCallback, CriticalError criticalError) { this.connection = connection; this.newVersionDetectedCallback = newVersionDetectedCallback; circuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("EventStoreExchangeMonitor", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to re-subscribe to changes in exchanges.", ex)); }