Task PurgeOutputQueue(QueueAddressTranslator addressParser) { purger = new QueuePurger(sqlConnectionFactory); var queueAddress = addressParser.Parse(validAddress); queue = new TableBasedQueue(queueAddress.QualifiedTableName, queueAddress.Address, true); return(purger.Purge(queue)); }
Task PurgeOutputQueue(QueueAddressTranslator addressParser, CancellationToken cancellationToken = default) { purger = new QueuePurger(sqlConnectionFactory); var queueAddress = addressParser.Parse(ValidAddress); queue = new TableBasedQueue(queueAddress.QualifiedTableName, queueAddress.Address, true); return(purger.Purge(queue, cancellationToken)); }
Task PurgeOutputQueue(QueueAddressParser addressParser) { purger = new QueuePurger(sqlConnectionFactory); var queueAddress = addressParser.Parse(validAddress); queue = new TableBasedQueue(queueAddress); return(purger.Purge(queue)); }
public async Task Should_recover(Type contextProviderType, DispatchConsistency dispatchConsistency) { // Setup var token = CancellationToken.None; var connectionString = Environment.GetEnvironmentVariable("SqlServerTransportConnectionString") ?? @"Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True"; sqlConnectionFactory = SqlConnectionFactory.Default(connectionString); var addressParser = new QueueAddressTranslator("nservicebus", "dbo", null, null); var purger = new QueuePurger(sqlConnectionFactory); await RemoveQueueIfPresent(QueueName, token); await RemoveQueueIfPresent($"{QueueName}.Delayed", token); await CreateOutputQueueIfNecessary(addressParser, sqlConnectionFactory); var tableCache = new TableBasedQueueCache(addressParser, true); var queue = tableCache.Get(QueueName); dispatcher = new MessageDispatcher(addressParser, new NoOpMulticastToUnicastConverter(), tableCache, null, sqlConnectionFactory); // Run normally int messagesSent = await RunTest(contextProviderType, dispatchConsistency, queue, purger, token); Assert.AreEqual(1, messagesSent); // Remove Recoverable column await DropRecoverableColumn(token); var exception = Assert.ThrowsAsync <Exception>(() => RunTest(contextProviderType, dispatchConsistency, queue, purger, token)); Assert.True(exception.Message.Contains("change in the existence of the Recoverable column")); // Try again, should work int messagesSentAttempt2 = await RunTest(contextProviderType, dispatchConsistency, queue, purger, token); Assert.AreEqual(1, messagesSentAttempt2); // Put the Recoverable column back await AddRecoverableColumn(token); var exception2 = Assert.ThrowsAsync <Exception>(() => RunTest(contextProviderType, dispatchConsistency, queue, purger, token)); Assert.True(exception2.Message.Contains("change in the existence of the Recoverable column")); // Try again, should work int messagesSentAttempt3 = await RunTest(contextProviderType, dispatchConsistency, queue, purger, token); Assert.AreEqual(1, messagesSentAttempt3); }
public void SetUp() { routingTopology = new ConventionalRoutingTopology(true); receivedMessages = new BlockingCollection <IncomingMessage>(); var settings = new SettingsHolder(); settings.Set("NServiceBus.Routing.EndpointName", "endpoint"); var connectionString = Environment.GetEnvironmentVariable("RabbitMQTransport.ConnectionString"); ConnectionConfiguration config; if (connectionString != null) { var parser = new ConnectionStringParser(settings); config = parser.Parse(connectionString); } else { config = new ConnectionConfiguration(settings); config.Host = "localhost"; } connectionFactory = new ConnectionFactory(config); channelProvider = new ChannelProvider(connectionFactory, routingTopology, true); messageDispatcher = new MessageDispatcher(channelProvider); var purger = new QueuePurger(connectionFactory); messagePump = new MessagePump(connectionFactory, new MessageConverter(), "Unit test", channelProvider, purger, TimeSpan.FromMinutes(2), 3, 0); MakeSureQueueAndExchangeExists(ReceiverQueue); subscriptionManager = new SubscriptionManager(connectionFactory, routingTopology, ReceiverQueue); messagePump.Init(messageContext => { receivedMessages.Add(new IncomingMessage(messageContext.MessageId, messageContext.Headers, messageContext.Body)); return(TaskEx.CompletedTask); }, ErrorContext => Task.FromResult(ErrorHandleResult.Handled), new CriticalError(_ => TaskEx.CompletedTask), new PushSettings(ReceiverQueue, "error", true, TransportTransactionMode.ReceiveOnly) ).GetAwaiter().GetResult(); messagePump.Start(new PushRuntimeSettings(MaximumConcurrency)); }
public void SetUp() { routingTopology = new ConventionalRoutingTopology(true); receivedMessages = new BlockingCollection <IncomingMessage>(); var connectionString = Environment.GetEnvironmentVariable("RabbitMQTransport_ConnectionString"); if (string.IsNullOrEmpty(connectionString)) { throw new Exception("The 'RabbitMQTransport_ConnectionString' environment variable is not set."); } var config = ConnectionConfiguration.Create(connectionString, ReceiverQueue); connectionFactory = new ConnectionFactory(ReceiverQueue, config, null, false, false); channelProvider = new ChannelProvider(connectionFactory, config.RetryDelay, routingTopology, true); channelProvider.CreateConnection(); messageDispatcher = new MessageDispatcher(channelProvider); var purger = new QueuePurger(connectionFactory); messagePump = new MessagePump(connectionFactory, new MessageConverter(), "Unit test", channelProvider, purger, TimeSpan.FromMinutes(2), 3, 0); routingTopology.Reset(connectionFactory, new[] { ReceiverQueue }.Concat(AdditionalReceiverQueues), new[] { ErrorQueue }); subscriptionManager = new SubscriptionManager(connectionFactory, routingTopology, ReceiverQueue); messagePump.Init(messageContext => { receivedMessages.Add(new IncomingMessage(messageContext.MessageId, messageContext.Headers, messageContext.Body)); return(TaskEx.CompletedTask); }, ErrorContext => Task.FromResult(ErrorHandleResult.Handled), new CriticalError(_ => TaskEx.CompletedTask), new PushSettings(ReceiverQueue, ErrorQueue, true, TransportTransactionMode.ReceiveOnly) ).GetAwaiter().GetResult(); messagePump.Start(new PushRuntimeSettings(MaximumConcurrency)); }
async Task <int> RunTest(Type contextProviderType, DispatchConsistency dispatchConsistency, TableBasedQueue queue, QueuePurger purger, CancellationToken cancellationToken) { using (var contextProvider = CreateContext(contextProviderType, sqlConnectionFactory)) { // Run with Recoverable column in place var operations = new TransportOperations(CreateTransportOperation(id: "1", destination: QueueName, consistency: dispatchConsistency)); await dispatcher.Dispatch(operations, contextProvider.TransportTransaction, cancellationToken); contextProvider.Complete(); return(await purger.Purge(queue, cancellationToken)); } }