public MessagePumpRetryCommandOnConnectionFailureTests()
        {
            _commandProcessor = new SpyCommandProcessor();
            var channel = new FailingChannel {
                NumberOfRetries = 1
            };
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = channel, TimeoutInMilliseconds = 500, RequeueCount = -1
            };

            var command = new MyCommand();

            //two command, will be received when connection restored
            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(command)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(command)));

            channel.Enqueue(message1);
            channel.Enqueue(message2);

            //end the pump
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            channel.Enqueue(quitMessage);
        }
        public MessagePumpCommandProcessingExceptionTestsAsync()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePumpAsync <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = _requeueCount
            };

            var msg = mapper.MapToMessage(new MyCommand());

            _channel.Enqueue(msg);
        }
Пример #3
0
        public MessagePumpCommandRequeueCountThresholdTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePumpBlocking <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            _command = new MyCommand();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message1);
            _channel.Enqueue(message2);
        }
Пример #4
0
        public void Establish()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            _command = new MyCommand();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));

            _channel.Add(message1);
            _channel.Add(message2);
        }
Пример #5
0
        public MessagePumpCommandRequeueTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = -1
            };

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message1);
            _channel.Enqueue(message2);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Enqueue(quitMessage);
        }
Пример #6
0
        public MessageDispatcherMultipleConnectionTests()
        {
            _eventChannel   = new FakeChannel();
            _commandChannel = new FakeChannel();
            var commandProcessor = new SpyCommandProcessor();

            var container = new ServiceCollection();

            container.AddTransient <MyEventMessageMapper>();
            container.AddTransient <MyCommandMessageMapper>();

            var messageMapperRegistry = new MessageMapperRegistry(new ServiceProviderMapperFactory(container.BuildServiceProvider()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();
            messageMapperRegistry.Register <MyCommand, MyCommandMessageMapper>();


            var myEventConnection   = new Subscription <MyEvent>(new SubscriptionName("test"), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_eventChannel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));
            var myCommandConnection = new Subscription <MyCommand>(new SubscriptionName("anothertest"), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_commandChannel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));

            _dispatcher = new Dispatcher(commandProcessor, messageMapperRegistry, new List <Subscription> {
                myEventConnection, myCommandConnection
            });

            var @event       = new MyEvent();
            var eventMessage = new MyEventMessageMapper().MapToMessage(@event);

            _eventChannel.Enqueue(eventMessage);

            var command        = new MyCommand();
            var commandMessage = new MyCommandMessageMapper().MapToMessage(command);

            _commandChannel.Enqueue(commandMessage);

            _dispatcher.State.Should().Be(DispatcherState.DS_AWAITING);
            _dispatcher.Receive();
        }
Пример #7
0
        public void Establish()
        {
            _eventChannel     = new FakeChannel();
            _commandChannel   = new FakeChannel();
            _commandProcessor = new SpyCommandProcessor();

            var container = new TinyIoCContainer();

            container.Register <MyEventMessageMapper>();
            container.Register <MyCommandMessageMapper>();

            var messageMapperRegistry = new MessageMapperRegistry(new TinyIoCMessageMapperFactory(container));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();
            messageMapperRegistry.Register <MyCommand, MyCommandMessageMapper>();


            var myEventConnection   = new Connection(name: new ConnectionName("test"), dataType: typeof(MyEvent), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_eventChannel), channelName: new ChannelName("fakeChannel"), routingKey: "fakekey");
            var myCommandConnection = new Connection(name: new ConnectionName("anothertest"), dataType: typeof(MyCommand), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_commandChannel), channelName: new ChannelName("fakeChannel"), routingKey: "fakekey");

            _dispatcher = new Dispatcher(_commandProcessor, messageMapperRegistry, new List <Connection> {
                myEventConnection, myCommandConnection
            });

            var @event       = new MyEvent();
            var eventMessage = new MyEventMessageMapper().MapToMessage(@event);

            _eventChannel.Add(eventMessage);

            var command        = new MyCommand();
            var commandMessage = new MyCommandMessageMapper().MapToMessage(command);

            _commandChannel.Add(commandMessage);

            Assert.AreEqual(DispatcherState.DS_AWAITING, _dispatcher.State);
            _dispatcher.Receive();
        }
Пример #8
0
        public void Establish()
        {
            _commandProcessor = new SpyCommandProcessor();
            _channel          = new FailingChannel {
                NumberOfRetries = 4
            };
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = -1
            };

            _command = new MyCommand();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));

            _channel.Add(message1);
            _channel.Add(message2);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Add(quitMessage);
        }