static async Task CreateDelayedMessageQueue(CanonicalQueueAddress canonicalQueueAddress, SqlConnection connection, SqlTransaction transaction, bool createMessageBodyComputedColumn) { #pragma warning disable 618 var sql = string.Format(SqlConstants.CreateDelayedMessageStoreText, canonicalQueueAddress.QualifiedTableName, canonicalQueueAddress.QuotedCatalogName); #pragma warning restore 618 using (var command = new SqlCommand(sql, connection, transaction) { CommandType = CommandType.Text }) { await command.ExecuteNonQueryAsync().ConfigureAwait(false); } if (createMessageBodyComputedColumn) { #pragma warning disable 618 var bodyStringSql = string.Format(SqlConstants.AddMessageBodyStringColumn, canonicalQueueAddress.QualifiedTableName, canonicalQueueAddress.QuotedCatalogName); #pragma warning restore 618 using (var command = new SqlCommand(bodyStringSql, connection, transaction) { CommandType = CommandType.Text }) { await command.ExecuteNonQueryAsync().ConfigureAwait(false); } } }
public QueueCreator(SqlConnectionFactory connectionFactory, QueueAddressTranslator addressTranslator, CanonicalQueueAddress delayedQueueAddress, bool createMessageBodyColumn = false) { this.connectionFactory = connectionFactory; this.addressTranslator = addressTranslator; this.delayedQueueAddress = delayedQueueAddress; this.createMessageBodyColumn = createMessageBodyColumn; }
static async Task CreateQueue(CanonicalQueueAddress canonicalQueueAddress, SqlConnection connection, SqlTransaction transaction) { var sql = string.Format(SqlConstants.CreateQueueText, canonicalQueueAddress.QualifiedTableName, canonicalQueueAddress.QuotedCatalogName); using (var command = new SqlCommand(sql, connection, transaction) { CommandType = CommandType.Text }) { await command.ExecuteNonQueryAsync().ConfigureAwait(false); } }
static async Task CreateQueue(string creationScript, CanonicalQueueAddress canonicalQueueAddress, SqlConnection connection, SqlTransaction transaction, bool createMessageBodyColumn) { var sql = string.Format(creationScript, canonicalQueueAddress.QualifiedTableName, canonicalQueueAddress.QuotedCatalogName); using (var command = new SqlCommand(sql, connection, transaction) { CommandType = CommandType.Text }) { await command.ExecuteNonQueryAsync().ConfigureAwait(false); } if (createMessageBodyColumn) { var bodyStringSql = string.Format(SqlConstants.AddMessageBodyStringColumn, canonicalQueueAddress.QualifiedTableName, canonicalQueueAddress.QuotedCatalogName); using (var command = new SqlCommand(bodyStringSql, connection, transaction) { CommandType = CommandType.Text }) { await command.ExecuteNonQueryAsync().ConfigureAwait(false); } } }
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 DelayedDeliveryQueueCreator(SqlConnectionFactory connectionFactory, ICreateQueues queueCreator, CanonicalQueueAddress delayedMessageTable, bool createMessageBodyComputedColumn = false) { this.connectionFactory = connectionFactory; this.queueCreator = queueCreator; this.delayedMessageTable = delayedMessageTable; this.createMessageBodyComputedColumn = createMessageBodyComputedColumn; }
public DelayedDeliveryQueueCreator(SqlConnectionFactory connectionFactory, ICreateQueues queueCreator, CanonicalQueueAddress delayedMessageTable) { this.connectionFactory = connectionFactory; this.queueCreator = queueCreator; this.delayedMessageTable = delayedMessageTable; }