public async Task When_outstanding_in_outbox_sweep_clears_them_async()
        {
            //Arrange
            const int milliSecondsSinceSent = 500;

            var outbox           = new InMemoryOutbox();
            var commandProcessor = new FakeCommandProcessor();
            var sweeper          = new OutboxSweeper(milliSecondsSinceSent, commandProcessor);

            var messages = new Message[] { new MessageTestDataBuilder(), new MessageTestDataBuilder(), new MessageTestDataBuilder() };

            foreach (var message in messages)
            {
                outbox.Add(message);
                commandProcessor.Post(message.ToStubRequest());
            }

            //Act
            await Task.Delay(milliSecondsSinceSent * 2); // -- let the messages expire

            sweeper.SweepAsyncOutbox();

            await Task.Delay(200);

            //Assert
            outbox.EntryCount.Should().Be(3);
            commandProcessor.Dispatched.Count.Should().Be(3);
            commandProcessor.Deposited.Count.Should().Be(3);
        }
        public void When_too_new_to_sweep_leaves_them()
        {
            //Arrange
            const int milliSecondsSinceSent = 500;

            var commandProcessor = new FakeCommandProcessor();
            var sweeper          = new OutboxSweeper(milliSecondsSinceSent, commandProcessor);

            Message oldMessage = new MessageTestDataBuilder();

            commandProcessor.DepositPost(oldMessage.ToStubRequest());

            var messages = new Message[] { new MessageTestDataBuilder(), new MessageTestDataBuilder(), new MessageTestDataBuilder() };

            Thread.Sleep(milliSecondsSinceSent * 2);

            foreach (var message in messages)
            {
                commandProcessor.DepositPost(message.ToStubRequest());
            }

            //Act
            sweeper.Sweep();

            Thread.Sleep(200);

            //Assert
            commandProcessor.Dispatched.Count.Should().Be(1);
            commandProcessor.Deposited.Count.Should().Be(4);
        }
Beispiel #3
0
        private void DoWork(object state)
        {
            s_logger.LogInformation("Outbox Sweeper looking for unsent messages");

            var outBoxSweeper = new OutboxSweeper(
                milliSecondsSinceSent: 5000,
                outbox: _outbox,
                commandProcessor: _commandProcessor);

            outBoxSweeper.Sweep();

            s_logger.LogInformation("Outbox Sweeper sleeping");
        }
Beispiel #4
0
        private void DoWork(object state)
        {
            s_logger.LogInformation("Outbox Sweeper looking for unsent messages");

            var scope = _serviceScopeFactory.CreateScope();

            try
            {
                IAmACommandProcessor commandProcessor = scope.ServiceProvider.GetService <IAmACommandProcessor>();

                var outBoxSweeper = new OutboxSweeper(
                    millisecondsSinceSent: _options.MinimumMessageAge,
                    commandProcessor: commandProcessor,
                    _options.BatchSize,
                    _options.UseBulk);

                if (_options.UseBulk)
                {
                    outBoxSweeper.SweepAsyncOutbox();
                }
                else
                {
                    outBoxSweeper.Sweep();
                }
            }
            catch (Exception e)
            {
                s_logger.LogError(e, "Error while sweeping the outbox.");
                throw;
            }
            finally
            {
                scope.Dispose();
            }

            s_logger.LogInformation("Outbox Sweeper sleeping");
        }
        public void When_too_new_to_sweep_leaves_them()
        {
            //Arrange
            const int milliSecondsSinceSent = 500;

            var outbox           = new InMemoryOutbox();
            var commandProcessor = new FakeCommandProcessor();
            var sweeper          = new OutboxSweeper(milliSecondsSinceSent, outbox, commandProcessor);

            var messages = new Message[] { new MessageTestDataBuilder(), new MessageTestDataBuilder(), new MessageTestDataBuilder() };

            foreach (var message in messages)
            {
                outbox.Add(message);
                commandProcessor.Post(message.ToStubRequest());
            }

            //Act
            sweeper.Sweep();

            //Assert
            commandProcessor.Dispatched.Count.Should().Be(3);
            commandProcessor.Posted.Count.Should().Be(0);
        }