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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 6
0
 public TestDelayedMessageStore(IDelayedMessageStore impl, Context context)
 {
     this.impl    = impl;
     this.context = context;
 }
Ejemplo n.º 7
0
 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);
 }