public async Task DeliversMessagesByVisibleTimeAndNotByInsertionTime()
        {
            var rebusTime          = new DefaultRebusTime();
            var loggerFactory      = new ConsoleLoggerFactory(false);
            var connectionProvider = new DbConnectionProvider(MySqlTestHelper.ConnectionString, loggerFactory);
            var asyncTaskFactory   = new TplAsyncTaskFactory(loggerFactory);

            var transport = new MySqlTransport(
                connectionProvider,
                QueueName,
                loggerFactory,
                asyncTaskFactory,
                rebusTime,
                new MySqlTransportOptions(connectionProvider));

            transport.EnsureTableIsCreated();
            transport.Initialize();

            var now = DateTime.Now;

            await PutInQueue(transport, GetTransportMessage("first message"));
            await PutInQueue(transport, GetTransportMessage("second message", deferredUntilTime : now.AddMinutes(-1)));
            await PutInQueue(transport, GetTransportMessage("third message", deferredUntilTime : now.AddMinutes(-2)));

            var firstMessage = await ReceiveMessageBody(transport);

            var secondMessage = await ReceiveMessageBody(transport);

            var thirdMessage = await ReceiveMessageBody(transport);

            // expect messages to be received in reverse order because of their visible times
            Assert.That(firstMessage, Is.EqualTo("third message"));
            Assert.That(secondMessage, Is.EqualTo("second message"));
            Assert.That(thirdMessage, Is.EqualTo("first message"));
        }
Beispiel #2
0
        public static IEnumerable <TransportMessage> GetMessages(this MySqlTransport transport)
        {
            var messages = new List <TransportMessage>();

            AsyncHelpers.RunSync(async() =>
            {
                while (true)
                {
                    using (var scope = new RebusTransactionScope())
                    {
                        var transportMessage = await transport.Receive(scope.TransactionContext, CancellationToken.None);
                        if (transportMessage == null)
                        {
                            break;
                        }

                        messages.Add(transportMessage);

                        await scope.CompleteAsync();
                    }
                }
            });

            return(messages);
        }
        public ITransport CreateOneWayClient()
        {
            var rebusTime            = new DefaultRebusTime();
            var consoleLoggerFactory = new ConsoleLoggerFactory(false);
            var connectionProvider   = new DbConnectionProvider(MySqlTestHelper.ConnectionString, consoleLoggerFactory);
            var asyncTaskFactory     = new TplAsyncTaskFactory(consoleLoggerFactory);
            var transport            = new MySqlTransport(connectionProvider, null, consoleLoggerFactory, asyncTaskFactory, rebusTime, new MySqlTransportOptions(connectionProvider));

            _disposables.Add(transport);

            transport.Initialize();

            return(transport);
        }
Beispiel #4
0
        protected override void SetUp()
        {
            MySqlTestHelper.DropTableIfExists(_tableName);
            var consoleLoggerFactory = new ConsoleLoggerFactory(false);
            var asyncTaskFactory     = new TplAsyncTaskFactory(consoleLoggerFactory);
            var connectionHelper     = new MySqlConnectionHelper(MySqlTestHelper.ConnectionString);

            _transport = new MySqlTransport(connectionHelper, _tableName, QueueName, consoleLoggerFactory, asyncTaskFactory);
            _transport.EnsureTableIsCreated();

            Using(_transport);

            _transport.Initialize();
            _cancellationToken = new CancellationTokenSource().Token;
        }
        protected override void SetUp()
        {
            MySqlTestHelper.DropAllTables();

            var rebusTime            = new DefaultRebusTime();
            var consoleLoggerFactory = new ConsoleLoggerFactory(false);
            var connectionProvider   = new DbConnectionProvider(MySqlTestHelper.ConnectionString, consoleLoggerFactory);
            var asyncTaskFactory     = new TplAsyncTaskFactory(consoleLoggerFactory);

            _transport = new MySqlTransport(connectionProvider, QueueName, consoleLoggerFactory, asyncTaskFactory, rebusTime, new MySqlTransportOptions(connectionProvider));
            _transport.EnsureTableIsCreated();

            Using(_transport);

            _transport.Initialize();

            _cancellationToken = new CancellationTokenSource().Token;
        }
Beispiel #6
0
        protected override void SetUp()
        {
            // start clean
            MySqlTestHelper.DropAllTables();

            // end clean
            Using(new DisposableCallback(MySqlTestHelper.DropAllTables));

            var loggerFactory      = new ListLoggerFactory();
            var connectionProvider = new DbConnectionProvider(MySqlTestHelper.ConnectionString, loggerFactory);

            _subscriptionStorage = new MySqlSubscriptionStorage(connectionProvider, "Subscriptions", isCentralized: true, loggerFactory);
            _subscriptionStorage.EnsureTableIsCreated();

            _subscriberTransport = Using(new MySqlTransport(connectionProvider, "subscriber", loggerFactory, new TplAsyncTaskFactory(loggerFactory), new FakeRebusTime(), new MySqlTransportOptions(connectionProvider)));
            _subscriberTransport.EnsureTableIsCreated();
            _subscriberTransport.Initialize();
        }
        public ITransport Create(string inputQueueAddress)
        {
            var tableName = ("rebus_messages_" + TestConfig.Suffix).TrimEnd('_');

            _tablesToDrop.Add(tableName);

            var consoleLoggerFactory = new ConsoleLoggerFactory(false);
            var connectionHelper     = new MySqlConnectionHelper(MySqlTestHelper.ConnectionString);
            var asyncTaskFactory     = new TplAsyncTaskFactory(consoleLoggerFactory);
            var transport            = new MySqlTransport(connectionHelper, tableName, inputQueueAddress, consoleLoggerFactory, asyncTaskFactory);

            _disposables.Add(transport);

            transport.EnsureTableIsCreated();
            transport.Initialize();

            return(transport);
        }
        public ITransport Create(string inputQueueAddress)
        {
            var tableName = ("RebusMessages_" + TestConfig.Suffix).TrimEnd('_');

            MySqlTestHelper.DropTable(tableName);

            _tablesToDrop.Add(tableName);

            var rebusTime            = new DefaultRebusTime();
            var consoleLoggerFactory = new ConsoleLoggerFactory(false);
            var connectionProvider   = new DbConnectionProvider(MySqlTestHelper.ConnectionString, consoleLoggerFactory);
            var asyncTaskFactory     = new TplAsyncTaskFactory(consoleLoggerFactory);
            var transport            = new MySqlTransport(connectionProvider, inputQueueAddress, consoleLoggerFactory, asyncTaskFactory, rebusTime, new MySqlTransportOptions(connectionProvider));

            _disposables.Add(transport);

            transport.EnsureTableIsCreated();
            transport.Initialize();

            return(transport);
        }
        static void Configure(StandardConfigurer <ITransport> configurer, Func <IRebusLoggerFactory, MySqlConnectionHelper> connectionProviderFactory, string tableName, string inputQueueName)
        {
            configurer.Register(context =>
            {
                var rebusLoggerFactory = context.Get <IRebusLoggerFactory>();
                var asyncTaskFactory   = context.Get <IAsyncTaskFactory>();
                var connectionProvider = connectionProviderFactory(rebusLoggerFactory);
                var transport          = new MySqlTransport(connectionProvider, tableName, inputQueueName, rebusLoggerFactory, asyncTaskFactory);
                transport.EnsureTableIsCreated();
                return(transport);
            });

            configurer.OtherService <ITimeoutManager>().Register(c => new DisabledTimeoutManager());

            configurer.OtherService <IPipeline>().Decorate(c =>
            {
                var pipeline = c.Get <IPipeline>();

                return(new PipelineStepRemover(pipeline)
                       .RemoveIncomingStep(s => s.GetType() == typeof(HandleDeferredMessagesStep)));
            });
        }
Beispiel #10
0
        public async Task CountTheConnections()
        {
            var activeConnections = new ConcurrentDictionary <int, object>();

            var bus = Configure.With(new BuiltinHandlerActivator())
                      .Transport(t => t.Register(c =>
            {
                var connectionProvider = new TestConnectionProvider(MySqlTestHelper.ConnectionString, activeConnections);
                var transport          = new MySqlTransport(connectionProvider, "bimse", c.Get <IRebusLoggerFactory>(), c.Get <IAsyncTaskFactory>(), c.Get <IRebusTime>(), new MySqlTransportOptions(connectionProvider));

                transport.EnsureTableIsCreated();

                return(transport);
            }))
                      .Start();

            using (new Timer(_ => Console.WriteLine("Active connections: {0}", activeConnections.Count), null, 0, 1000))
            {
                using (bus)
                {
                    await Task.Delay(TimeSpan.FromSeconds(5));
                }
            }
        }