Example #1
0
        public void AddMessageHandler <T>(Func <IHandler <T> > futureHandler) where T : Message
        {
            List <Func <Message, bool> > handlers;

            if (!_handlers.TryGetValue(typeof(T), out handlers))
            {
                handlers = new List <Func <Message, bool> >();
                _handlers.Add(typeof(T), handlers);
            }
            var handlerInstance    = futureHandler();
            var guaranteedDelivery = new GuaranteedOnceDelivery <T>(handlerInstance);

            IHandler <T> handler = new FutureHandler <T>(futureHandler);

            if (guaranteedDelivery.Enabled)
            {
                if (_messageLock == null)
                {
                    throw new Exception("IMessageLock is null. You need to specify an implementation for IMessageLock.");
                }

                handler = new ExactlyOnceHandler <T>(handler, _messageLock, guaranteedDelivery.TimeOut, handlerInstance.GetType().FullName.ToLower());
            }
            var executionTimeMonitoring = _messagingMonitor as IMeasureHandlerExecutionTime;

            if (executionTimeMonitoring != null)
            {
                handler = new StopwatchHandler <T>(handler, executionTimeMonitoring);
            }

            Subscribers.Add(new Subscriber(typeof(T)));
            handlers.Add(message => handler.Handle((T)message));
        }
        public void AddMessageHandler <T>(IHandler <T> handler) where T : Message
        {
            List <Func <Message, bool> > handlers;

            if (!_handlers.TryGetValue(typeof(T), out handlers))
            {
                handlers = new List <Func <Message, bool> >();
                _handlers.Add(typeof(T), handlers);
            }
            var guaranteedDelivery = new GuaranteedOnceDelivery <T>(handler);

            if (guaranteedDelivery.Enabled)
            {
                if (_messageLock == null)
                {
                    throw new Exception("IMessageLock is null. You need to specify an implementation for IMessageLock.");
                }

                handler = new ExactlyOnceHandler <T>(handler, _messageLock, guaranteedDelivery.TimeOut);
            }
            var executionTimeMonitoring = _messagingMonitor as IMeasureHandlerExecutionTime;

            if (executionTimeMonitoring != null)
            {
                handler = new StopwatchHandler <T>(handler, executionTimeMonitoring);
            }

            handlers.Add(DelegateAdjuster.CastArgument <Message, T>(x => handler.Handle(x)));
        }
Example #3
0
        public async Task WhenMessageIsLockedByAnotherHandler_MessageWillBeLeftInTheQueue()
        {
            // Arrange
            var messageLock = Substitute.For <IMessageLockAsync>();

            messageLock
            .TryAquireLockAsync(Arg.Any <string>(), Arg.Any <TimeSpan>())
            .Returns(new MessageLockResponse {
                DoIHaveExclusiveLock = false
            });

            var logger = NullLoggerFactory.Instance.CreateLogger <ExactlyOnceHandler <OrderAccepted> >();

            var sut = new ExactlyOnceHandler <OrderAccepted>(
                Substitute.For <IHandlerAsync <OrderAccepted> >(),
                messageLock,
                TimeSpan.FromSeconds(1),
                "handlerName",
                logger);

            // Act
            var result = await sut.Handle(new OrderAccepted());

            // Assert
            result.ShouldBeFalse();
        }
        public void WhenMessageIsLockedByAnotherHandler_MessageWillBeLeftInTheQueue()
        {
            var messageLock = Substitute.For<IMessageLock>();
            messageLock.TryAquireLock(Arg.Any<string>(), Arg.Any<TimeSpan>()).Returns(new MessageLockResponse(){DoIHaveExclusiveLock = false});
            var sut = new ExactlyOnceHandler<OrderAccepted>(Substitute.For<IHandler<OrderAccepted>>(), messageLock, 1, "handlerName");

            var result = sut.Handle(new OrderAccepted());

            Assert.IsFalse(result);
        }
        protected override void Given()
        {
            Handler = new ExactlyOnceHandler();

            _queue = CreateSuccessfulTestQueue("TestQueue", new TestMessage());

            Queues.Add(_queue);

            MessageLock = new FakeMessageLock();
        }
Example #6
0
        public async Task WhenMessageIsLockedByAnotherHandler_MessageWillBeLeftInTheQueue()
        {
            var messageLock = Substitute.For <IMessageLock>();

            messageLock.TryAquireLock(Arg.Any <string>(), Arg.Any <TimeSpan>()).Returns(new MessageLockResponse {
                DoIHaveExclusiveLock = false
            });
            var sut = new ExactlyOnceHandler <OrderAccepted>(Substitute.For <IHandlerAsync <OrderAccepted> >(), messageLock, 1, "handlerName");

            var result = await sut.Handle(new OrderAccepted());

            result.ShouldBeFalse();
        }