public override TransportReceiveInfrastructure ConfigureReceiveInfrastructure() { SqlScopeOptions scopeOptions; if (!settings.TryGet(out scopeOptions)) { scopeOptions = new SqlScopeOptions(); } TimeSpan waitTimeCircuitBreaker; if (!settings.TryGet(SettingsKeys.TimeToWaitBeforeTriggering, out waitTimeCircuitBreaker)) { waitTimeCircuitBreaker = TimeSpan.FromSeconds(30); } QueuePeekerOptions queuePeekerOptions; if (!settings.TryGet(out queuePeekerOptions)) { queuePeekerOptions = new QueuePeekerOptions(); } var connectionFactory = CreateConnectionFactory(); Func <TransportTransactionMode, ReceiveStrategy> receiveStrategyFactory = guarantee => SelectReceiveStrategy(guarantee, scopeOptions.TransactionOptions, connectionFactory); var queuePurger = new QueuePurger(connectionFactory); var queuePeeker = new QueuePeeker(connectionFactory, queuePeekerOptions); var expiredMessagesPurger = CreateExpiredMessagesPurger(connectionFactory); Func <QueueAddress, TableBasedQueue> queueFactory = qa => new TableBasedQueue(qa); return(new TransportReceiveInfrastructure( () => new MessagePump(receiveStrategyFactory, queueFactory, queuePurger, expiredMessagesPurger, queuePeeker, addressParser, waitTimeCircuitBreaker), () => new QueueCreator(connectionFactory, addressParser), () => Task.FromResult(StartupCheckResult.Success))); }
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); var connectionFactory = CreateConnectionFactory(); Func <TransportTransactionMode, ReceiveStrategy> receiveStrategyFactory = guarantee => SelectReceiveStrategy(guarantee, scopeOptions.TransactionOptions, connectionFactory); var queuePurger = new QueuePurger(connectionFactory); var queuePeeker = new QueuePeeker(connectionFactory, queuePeekerOptions); var expiredMessagesPurger = CreateExpiredMessagesPurger(connectionFactory); var schemaVerification = new SchemaInspector(queue => connectionFactory.OpenNewConnection()); Func <string, TableBasedQueue> queueFactory = queueName => new TableBasedQueue(addressTranslator.Parse(queueName).QualifiedTableName, queueName); var delayedMessageStore = GetDelayedQueueTableName(); var sendInfra = ConfigureSendInfrastructure(); return(new TransportReceiveInfrastructure( () => { var pump = new MessagePump(receiveStrategyFactory, queueFactory, queuePurger, expiredMessagesPurger, queuePeeker, schemaVerification, waitTimeCircuitBreaker); if (delayedDeliverySettings == null) { return pump; } var dispatcher = sendInfra.DispatcherFactory(); var delayedMessageProcessor = new DelayedMessageProcessor(dispatcher); return new DelayedDeliveryMessagePump(pump, delayedMessageProcessor); }, () => { var creator = new QueueCreator(connectionFactory, addressTranslator, createMessageBodyComputedColumn); if (delayedDeliverySettings == null) { return creator; } return new DelayedDeliveryQueueCreator(connectionFactory, creator, delayedMessageStore, createMessageBodyComputedColumn); }, () => CheckForAmbientTransactionEnlistmentSupport(connectionFactory, scopeOptions.TransactionOptions))); }
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))); }
public override TransportReceiveInfrastructure ConfigureReceiveInfrastructure() { SqlScopeOptions scopeOptions; if (!settings.TryGet(out scopeOptions)) { scopeOptions = new SqlScopeOptions(); } TimeSpan waitTimeCircuitBreaker; if (!settings.TryGet(SettingsKeys.TimeToWaitBeforeTriggering, out waitTimeCircuitBreaker)) { waitTimeCircuitBreaker = TimeSpan.FromSeconds(30); } QueuePeekerOptions queuePeekerOptions; if (!settings.TryGet(out queuePeekerOptions)) { queuePeekerOptions = new QueuePeekerOptions(); } var connectionFactory = CreateConnectionFactory(); Func <TransportTransactionMode, ReceiveStrategy> receiveStrategyFactory = guarantee => SelectReceiveStrategy(guarantee, scopeOptions.TransactionOptions, connectionFactory); var queuePurger = new QueuePurger(connectionFactory); var queuePeeker = new QueuePeeker(connectionFactory, queuePeekerOptions); var expiredMessagesPurger = CreateExpiredMessagesPurger(connectionFactory); var schemaVerification = new SchemaInspector(queue => connectionFactory.OpenNewConnection()); Func <string, TableBasedQueue> queueFactory = queueName => new TableBasedQueue(addressTranslator.Parse(queueName).QualifiedTableName, queueName); var delayedMessageStore = GetDelayedQueueTableName(); var sendInfra = ConfigureSendInfrastructure(); return(new TransportReceiveInfrastructure( () => { var pump = new MessagePump(receiveStrategyFactory, queueFactory, queuePurger, expiredMessagesPurger, queuePeeker, schemaVerification, waitTimeCircuitBreaker); if (delayedDeliverySettings == null) { return pump; } var dispatcher = sendInfra.DispatcherFactory(); var delayedMessageProcessor = new DelayedMessageProcessor(dispatcher, settings.LocalAddress()); return new DelayedDeliveryMessagePump(pump, delayedMessageProcessor); }, () => { var creator = new QueueCreator(connectionFactory, addressTranslator); if (delayedDeliverySettings == null) { return creator; } return new DelayedDeliveryQueueCreator(connectionFactory, creator, delayedMessageStore); }, () => Task.FromResult(StartupCheckResult.Success))); }