コード例 #1
0
        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"
                );
        }
コード例 #2
0
        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));
        }
コード例 #4
0
        /// <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;
            }
        }
コード例 #5
0
        /// <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;
        }