public DelayedMessageHandler(DelayedMessageTable table, SqlConnectionFactory connectionFactory, TimeSpan interval, int batchSize) { this.table = table; this.connectionFactory = connectionFactory; this.interval = interval; this.batchSize = batchSize; }
public DueDelayedMessageProcessor(DelayedMessageTable table, SqlConnectionFactory connectionFactory, TimeSpan interval, int batchSize) { this.table = table; this.connectionFactory = connectionFactory; this.interval = interval; this.batchSize = batchSize; message = $"Scheduling next attempt to move matured delayed messages to input queue in {interval}"; }
public DelayedDeliveryTableBasedQueueOperationsReader(DelayedMessageTable delayedMessageTable, ITableBasedQueueOperationsReader immediateDeliveryQueueOperationsReader) { this.delayedMessageTable = delayedMessageTable; this.immediateDeliveryQueueOperationsReader = immediateDeliveryQueueOperationsReader; }
public override TransportReceiveInfrastructure ConfigureReceiveInfrastructure() { if (!settings.TryGet(out SqlScopeOptions scopeOptions)) { scopeOptions = new SqlScopeOptions(); } settings.TryGet(out TransportTransactionMode transactionMode); diagnostics.Add("NServiceBus.Transport.SqlServer.Transactions", new { TransactionMode = transactionMode, scopeOptions.TransactionOptions.IsolationLevel, scopeOptions.TransactionOptions.Timeout }); if (!settings.TryGet(SettingsKeys.TimeToWaitBeforeTriggering, out TimeSpan waitTimeCircuitBreaker)) { waitTimeCircuitBreaker = TimeSpan.FromSeconds(30); } diagnostics.Add("NServiceBus.Transport.SqlServer.CircuitBreaker", new { TimeToWaitBeforeTriggering = waitTimeCircuitBreaker }); if (!settings.TryGet(out QueuePeekerOptions queuePeekerOptions)) { queuePeekerOptions = new QueuePeekerOptions(); } var createMessageBodyComputedColumn = settings.GetOrDefault <bool>(SettingsKeys.CreateMessageBodyComputedColumn); Func <TransportTransactionMode, ReceiveStrategy> receiveStrategyFactory = guarantee => SelectReceiveStrategy(guarantee, scopeOptions.TransactionOptions, connectionFactory); var queuePurger = new QueuePurger(connectionFactory); var queuePeeker = new QueuePeeker(connectionFactory, queuePeekerOptions); var expiredMessagesPurger = CreateExpiredMessagesPurger(); var schemaVerification = new SchemaInspector(queue => connectionFactory.OpenNewConnection()); Func <string, TableBasedQueue> queueFactory = queueName => new TableBasedQueue(addressTranslator.Parse(queueName).QualifiedTableName, queueName); //Create delayed delivery infrastructure CanonicalQueueAddress delayedQueueCanonicalAddress = null; if (false == settings.GetOrDefault <bool>(SettingsKeys.DisableDelayedDelivery)) { var delayedDeliverySettings = settings.GetOrDefault <DelayedDeliverySettings>(); settings.AddStartupDiagnosticsSection("NServiceBus.Transport.SqlServer.DelayedDelivery", new { Native = true, delayedDeliverySettings.Suffix, delayedDeliverySettings.Interval, BatchSize = delayedDeliverySettings.MatureBatchSize, TimoutManager = delayedDeliverySettings.EnableMigrationMode ? "enabled" : "disabled" }); delayedQueueCanonicalAddress = GetDelayedTableAddress(delayedDeliverySettings); var inputQueueTable = addressTranslator.Parse(ToTransportAddress(logicalAddress())).QualifiedTableName; var delayedMessageTable = new DelayedMessageTable(delayedQueueCanonicalAddress.QualifiedTableName, inputQueueTable); //Allows dispatcher to store messages in the delayed store delayedMessageStore = delayedMessageTable; dueDelayedMessageProcessor = new DueDelayedMessageProcessor(delayedMessageTable, connectionFactory, delayedDeliverySettings.Interval, delayedDeliverySettings.MatureBatchSize); } return(new TransportReceiveInfrastructure( () => new MessagePump(receiveStrategyFactory, queueFactory, queuePurger, expiredMessagesPurger, queuePeeker, schemaVerification, waitTimeCircuitBreaker), () => new QueueCreator(connectionFactory, addressTranslator, delayedQueueCanonicalAddress, createMessageBodyComputedColumn), () => CheckForAmbientTransactionEnlistmentSupport(scopeOptions.TransactionOptions))); }