public async Task SeeIfItWorks() { var callBackWasCalledAlright = Using(new ManualResetEvent(initialState: false)); var activator = Using(new BuiltinHandlerActivator()); Configure.With(activator) .Transport(t => { var options = new MySqlTransportOptions(c => { var connectionString = MySqlTestHelper.ConnectionString; var loggerFactory = c.Get <IRebusLoggerFactory>(); var connectionProvider = new DbConnectionProvider(connectionString, loggerFactory) { SqlConnectionOpening = async connection => callBackWasCalledAlright.Set() }; return(connectionProvider); }); t.UseMySql(options, "test-queue"); }) .Start(); callBackWasCalledAlright.WaitOrDie( timeout: TimeSpan.FromSeconds(3), errorMessage: $"The '{nameof(DbConnectionProvider.SqlConnectionOpening)}' callback was not invoked as expected" ); }
public async Task Dispose_WhenAutoDeleteQueueEnabled_DropsInputQueue() { var consoleLoggerFactory = new ConsoleLoggerFactory(false); var connectionProvider = new DbConnectionProvider(MySqlTestHelper.ConnectionString, consoleLoggerFactory); const string queueName = "input"; var options = new MySqlTransportOptions(MySqlTestHelper.ConnectionString); var activator = Using(new BuiltinHandlerActivator()); Configure.With(activator) .Logging(l => l.Use(consoleLoggerFactory)) .Transport(t => t.UseMySql(options, queueName).SetAutoDeleteQueue(true)) .Start(); using (var connection = await connectionProvider.GetConnectionAsync()) { Assert.That(connection.GetTableNames().Contains(TableName.Parse(queueName)), Is.True); } CleanUpDisposables(); using (var connection = await connectionProvider.GetConnectionAsync()) { Assert.That(connection.GetTableNames().Contains(TableName.Parse(queueName)), Is.False); } }
public async Task CanConfigureIt() { var activator = Using(new BuiltinHandlerActivator()); var options = new MySqlTransportOptions(MySqlTestHelper.ConnectionString); Configure.With(activator) .Transport(t => { t.UseMySql(options, TestConfig.GetName("whatever")) .SetExpiredMessagesCleanupInterval(TimeSpan.FromSeconds(5)); }) .Start(); await Task.Delay(TimeSpan.FromSeconds(15)); }
/// <summary> /// Constructor /// </summary> /// <param name="connectionProvider">A <see cref="IDbConnection"/> to obtain a database connection</param> /// <param name="inputQueueName">Name of the queue this transport is servicing</param> /// <param name="rebusLoggerFactory">A <seealso cref="IRebusLoggerFactory"/> for building loggers</param> /// <param name="asyncTaskFactory">A <seealso cref="IAsyncTaskFactory"/> for creating periodic tasks</param> /// <param name="rebusTime">A <seealso cref="IRebusTime"/> to provide the current time</param> /// <param name="options">Additional options</param> public MySqlTransport( IDbConnectionProvider connectionProvider, string inputQueueName, IRebusLoggerFactory rebusLoggerFactory, IAsyncTaskFactory asyncTaskFactory, IRebusTime rebusTime, MySqlTransportOptions options) { if (rebusLoggerFactory == null) { throw new ArgumentNullException(nameof(rebusLoggerFactory)); } if (asyncTaskFactory == null) { throw new ArgumentNullException(nameof(asyncTaskFactory)); } _rebusTime = rebusTime ?? throw new ArgumentNullException(nameof(rebusTime)); _connectionProvider = connectionProvider ?? throw new ArgumentNullException(nameof(connectionProvider)); _receiveTableName = inputQueueName != null?TableName.Parse(inputQueueName) : null; _log = rebusLoggerFactory.GetLogger <MySqlTransport>(); var cleanupInterval = options.ExpiredMessagesCleanupInterval ?? DefaultExpiredMessagesCleanupInterval; var intervalSeconds = (int)cleanupInterval.TotalSeconds; _expiredMessagesCleanupTask = asyncTaskFactory.Create("ExpiredMessagesCleanup", PerformExpiredMessagesCleanupCycle, intervalSeconds: intervalSeconds); _autoDeleteQueue = options.AutoDeleteQueue; _leasedByFactory = options.LeasedByFactory ?? (() => Environment.MachineName); _leaseInterval = options.LeaseInterval ?? DefaultLeaseTime; _leaseTolerance = options.LeaseInterval ?? DefaultLeaseTolerance; _ensureTablesAreCreated = options.EnsureTablesAreCreated; var automaticLeaseRenewalInterval = options.LeaseAutoRenewInterval; if (!automaticLeaseRenewalInterval.HasValue) { _automaticLeaseRenewal = false; } else { _automaticLeaseRenewal = true; _automaticLeaseRenewalInterval = automaticLeaseRenewalInterval.Value; } }
/// <summary> /// Constructs the transport with the given <see cref="IDbConnectionProvider"/> /// </summary> public MySqlTransport(IDbConnectionProvider connectionProvider, string inputQueueName, IRebusLoggerFactory rebusLoggerFactory, IAsyncTaskFactory asyncTaskFactory, IRebusTime rebusTime, MySqlTransportOptions options) { if (rebusLoggerFactory == null) { throw new ArgumentNullException(nameof(rebusLoggerFactory)); } if (asyncTaskFactory == null) { throw new ArgumentNullException(nameof(asyncTaskFactory)); } _rebusTime = rebusTime ?? throw new ArgumentNullException(nameof(rebusTime)); _connectionProvider = connectionProvider ?? throw new ArgumentNullException(nameof(connectionProvider)); _receiveTableName = inputQueueName != null?TableName.Parse(inputQueueName) : null; _log = rebusLoggerFactory.GetLogger <MySqlTransport>(); var cleanupInterval = options.ExpiredMessagesCleanupInterval ?? DefaultExpiredMessagesCleanupInterval; var intervalSeconds = (int)cleanupInterval.TotalSeconds; _expiredMessagesCleanupTask = asyncTaskFactory.Create("ExpiredMessagesCleanup", PerformExpiredMessagesCleanupCycle, intervalSeconds: intervalSeconds); _autoDeleteQueue = options.AutoDeleteQueue; }