public DueDelayedMessagePoller(MsmqMessageDispatcher dispatcher, IDelayedMessageStore delayedMessageStore, int numberOfRetries, Action <string, Exception, CancellationToken> criticalErrorAction, string timeoutsErrorQueue, Dictionary <string, string> faultMetadata, TransportTransactionMode transportTransactionMode, TimeSpan timeToTriggerFetchCircuitBreaker, TimeSpan timeToTriggerDispatchCircuitBreaker, int maximumRecoveryFailuresPerSecond, string timeoutsQueueTransportAddress) { txOption = transportTransactionMode == TransportTransactionMode.TransactionScope ? TransactionScopeOption.Required : TransactionScopeOption.RequiresNew; this.delayedMessageStore = delayedMessageStore; errorQueue = timeoutsErrorQueue; this.faultMetadata = faultMetadata; this.timeoutsQueueTransportAddress = timeoutsQueueTransportAddress; this.numberOfRetries = numberOfRetries; this.dispatcher = dispatcher; fetchCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqDelayedMessageFetch", timeToTriggerFetchCircuitBreaker, ex => criticalErrorAction("Failed to fetch due delayed messages from the storage", ex, tokenSource?.Token ?? CancellationToken.None)); dispatchCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqDelayedMessageDispatch", timeToTriggerDispatchCircuitBreaker, ex => criticalErrorAction("Failed to dispatch delayed messages to destination", ex, tokenSource?.Token ?? CancellationToken.None)); failureHandlingCircuitBreaker = new FailureRateCircuitBreaker("MsmqDelayedMessageFailureHandling", maximumRecoveryFailuresPerSecond, ex => criticalErrorAction("Failed to execute error handling for delayed message forwarding", ex, tokenSource?.Token ?? CancellationToken.None)); signalQueue = Channel.CreateBounded <bool>(1); taskQueue = Channel.CreateBounded <Task>(2); }
public DelayedDeliveryPump(MsmqMessageDispatcher dispatcher, DueDelayedMessagePoller poller, IDelayedMessageStore storage, MessagePump messagePump, string errorQueue, int numberOfRetries, Action <string, Exception, CancellationToken> criticalErrorAction, TimeSpan timeToWaitForStoreCircuitBreaker, Dictionary <string, string> faultMetadata, TransportTransactionMode transportTransactionMode) { this.dispatcher = dispatcher; this.poller = poller; this.storage = storage; this.numberOfRetries = numberOfRetries; this.faultMetadata = faultMetadata; pump = messagePump; this.errorQueue = errorQueue; txOption = transportTransactionMode == TransportTransactionMode.TransactionScope ? TransactionScopeOption.Required : TransactionScopeOption.RequiresNew; storeCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("DelayedDeliveryStore", timeToWaitForStoreCircuitBreaker, ex => criticalErrorAction("Failed to store delayed message", ex, CancellationToken.None)); }
public WrapDelayedMessageStore(IDelayedMessageStore impl, Context context) { this.context = context; delayedMessageStoreImplementation = impl; }
public FaultyDelayedMessageStore(IDelayedMessageStore impl) { this.impl = impl; }
public MessageDispatcher(QueueAddressTranslator addressTranslator, IMulticastToUnicastConverter multicastToUnicastConverter, TableBasedQueueCache tableBasedQueueCache, IDelayedMessageStore delayedMessageTable, SqlConnectionFactory connectionFactory) { this.addressTranslator = addressTranslator; this.multicastToUnicastConverter = multicastToUnicastConverter; this.tableBasedQueueCache = tableBasedQueueCache; this.delayedMessageTable = delayedMessageTable; this.connectionFactory = connectionFactory; }
public TestDelayedMessageStore(IDelayedMessageStore impl, Context context) { this.impl = impl; this.context = context; }
public static DelayedDeliverySettings NativeDelayedDelivery(this TransportExtensions <MsmqTransport> config, IDelayedMessageStore delayedMessageStore) { Guard.AgainstNull(nameof(delayedMessageStore), delayedMessageStore); config.Transport.DelayedDelivery = new DelayedDeliverySettings(delayedMessageStore); return(config.Transport.DelayedDelivery); }