Ejemplo n.º 1
0
        internal RequestMessageDispatcher GetRequestMessageDispatcher <TRequest, TResponse, TRequestHandler>(IInboundInterceptor interceptor)
            where TRequest : IBusRequest <TRequest, TResponse>
            where TResponse : IBusResponse
            where TRequestHandler : IHandleRequest <TRequest, TResponse>, new()
        {
            var messagingFactory   = Substitute.For <INimbusMessagingFactory>();
            var clock              = Substitute.For <IClock>();
            var logger             = Substitute.For <ILogger>();
            var dependencyResolver = Substitute.For <IDependencyResolver>();
            var scope              = Substitute.For <IDependencyResolverScope>();

            _taskFactory = new NimbusTaskFactory(new MaximumThreadPoolThreadsSetting(), new MinimumThreadPoolThreadsSetting(), logger);
            scope.Resolve <TRequestHandler>().Returns(new TRequestHandler());
            dependencyResolver.CreateChildScope().Returns(scope);
            var inboundInterceptorFactory = Substitute.For <IInboundInterceptorFactory>();

            inboundInterceptorFactory.CreateInterceptors(Arg.Any <IDependencyResolverScope>(), Arg.Any <object>(), Arg.Any <object>(), Arg.Any <BrokeredMessage>())
            .Returns(new[] { interceptor });

            var outboundInterceptorFactory = new NullOutboundInterceptorFactory();

            return(new RequestMessageDispatcher(
                       BrokeredMessageFactory,
                       clock,
                       dependencyResolver,
                       inboundInterceptorFactory,
                       outboundInterceptorFactory,
                       logger,
                       messagingFactory,
                       HandlerMapper.GetFullHandlerMap(typeof(IHandleRequest <,>)),
                       new DefaultMessageLockDurationSetting(),
                       _taskFactory,
                       Substitute.For <IPropertyInjector>()));
        }
Ejemplo n.º 2
0
 public RequestMessageDispatcher(
     IBrokeredMessageFactory brokeredMessageFactory,
     IClock clock,
     IDependencyResolver dependencyResolver,
     IInboundInterceptorFactory inboundInterceptorFactory,
     IOutboundInterceptorFactory outboundInterceptorFactory,
     ILogger logger,
     INimbusMessagingFactory messagingFactory,
     IReadOnlyDictionary <Type, Type[]> handlerMap,
     DefaultMessageLockDurationSetting defaultMessageLockDuration,
     INimbusTaskFactory taskFactory,
     IPropertyInjector propertyInjector)
 {
     _brokeredMessageFactory = brokeredMessageFactory;
     _clock = clock;
     _dependencyResolver         = dependencyResolver;
     _inboundInterceptorFactory  = inboundInterceptorFactory;
     _outboundInterceptorFactory = outboundInterceptorFactory;
     _logger                     = logger;
     _messagingFactory           = messagingFactory;
     _handlerMap                 = handlerMap;
     _defaultMessageLockDuration = defaultMessageLockDuration;
     _taskFactory                = taskFactory;
     _propertyInjector           = propertyInjector;
 }
Ejemplo n.º 3
0
 public LongRunningTaskWrapper(Task <T> handlerTask,
                               ILongRunningTask longRunningHandler,
                               BrokeredMessage message,
                               IClock clock,
                               ILogger logger,
                               TimeSpan messageLockDuration,
                               INimbusTaskFactory taskFactory)
     : base(handlerTask, longRunningHandler, message, clock, logger, taskFactory, messageLockDuration)
 {
 }
 public CompetingEventMessageDispatcher(IBrokeredMessageFactory brokeredMessageFactory,
                                        IClock clock,
                                        IDependencyResolver dependencyResolver,
                                        IInboundInterceptorFactory inboundInterceptorFactory,
                                        IReadOnlyDictionary <Type, Type[]> handlerMap,
                                        DefaultMessageLockDurationSetting defaultMessageLockDuration,
                                        INimbusTaskFactory taskFactory,
                                        IPropertyInjector propertyInjector,
                                        ILogger logger)
     : base(brokeredMessageFactory, clock, dependencyResolver, handlerMap, inboundInterceptorFactory, logger, defaultMessageLockDuration, taskFactory)
 {
     _propertyInjector = propertyInjector;
 }
Ejemplo n.º 5
0
 public MessagePump(
     IClock clock,
     IDispatchContextManager dispatchContextManager,
     ILogger logger,
     IMessageDispatcher messageDispatcher,
     INimbusMessageReceiver receiver,
     INimbusTaskFactory taskFactory)
 {
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _logger = logger;
     _messageDispatcher = messageDispatcher;
     _receiver = receiver;
     _taskFactory = taskFactory;
 }
Ejemplo n.º 6
0
 public MessagePump(
     IClock clock,
     IDispatchContextManager dispatchContextManager,
     ILogger logger,
     IMessageDispatcher messageDispatcher,
     INimbusMessageReceiver receiver,
     INimbusTaskFactory taskFactory)
 {
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _logger            = logger;
     _messageDispatcher = messageDispatcher;
     _receiver          = receiver;
     _taskFactory       = taskFactory;
 }
Ejemplo n.º 7
0
 public MessagePumpsManager(IMessagePump responseMessagePump,
                            IEnumerable<IMessagePump> requestMessagePumps,
                            IEnumerable<IMessagePump> commandMessagePumps,
                            IEnumerable<IMessagePump> multicastRequestMessagePumps,
                            IEnumerable<IMessagePump> multicastEventMessagePumps,
                            IEnumerable<IMessagePump> competingEventMessagePumps,
                            INimbusTaskFactory taskFactory)
 {
     _responseMessagePump = responseMessagePump;
     _commandMessagePumps = commandMessagePumps.ToArray();
     _requestMessagePumps = requestMessagePumps.ToArray();
     _multicastRequestMessagePumps = multicastRequestMessagePumps.ToArray();
     _multicastEventMessagePumps = multicastEventMessagePumps.ToArray();
     _competingEventMessagePumps = competingEventMessagePumps.ToArray();
     _taskFactory = taskFactory;
 }
Ejemplo n.º 8
0
 public MessagePumpsManager(IMessagePump responseMessagePump,
                            IEnumerable <IMessagePump> requestMessagePumps,
                            IEnumerable <IMessagePump> commandMessagePumps,
                            IEnumerable <IMessagePump> multicastRequestMessagePumps,
                            IEnumerable <IMessagePump> multicastEventMessagePumps,
                            IEnumerable <IMessagePump> competingEventMessagePumps,
                            INimbusTaskFactory taskFactory)
 {
     _responseMessagePump          = responseMessagePump;
     _commandMessagePumps          = commandMessagePumps.ToArray();
     _requestMessagePumps          = requestMessagePumps.ToArray();
     _multicastRequestMessagePumps = multicastRequestMessagePumps.ToArray();
     _multicastEventMessagePumps   = multicastEventMessagePumps.ToArray();
     _competingEventMessagePumps   = competingEventMessagePumps.ToArray();
     _taskFactory = taskFactory;
 }
Ejemplo n.º 9
0
 protected EventMessageDispatcher(IBrokeredMessageFactory brokeredMessageFactory,
                                  IClock clock,
                                  IDependencyResolver dependencyResolver,
                                  IReadOnlyDictionary <Type, Type[]> handlerMap,
                                  IInboundInterceptorFactory inboundInterceptorFactory,
                                  ILogger logger,
                                  DefaultMessageLockDurationSetting defaultMessageLockDuration,
                                  INimbusTaskFactory taskFactory)
 {
     _brokeredMessageFactory = brokeredMessageFactory;
     _clock = clock;
     _dependencyResolver        = dependencyResolver;
     _handlerMap                = handlerMap;
     _inboundInterceptorFactory = inboundInterceptorFactory;
     _logger = logger;
     _defaultMessageLockDuration = defaultMessageLockDuration;
     _taskFactory = taskFactory;
 }
Ejemplo n.º 10
0
 internal ResponseMessagePumpFactory(ConcurrentHandlerLimitSetting concurrentHandlerLimit,
                                     ReplyQueueNameSetting replyQueueName,
                                     IClock clock,
                                     IDispatchContextManager dispatchContextManager,
                                     ILogger logger,
                                     INimbusTaskFactory taskFactory,
                                     IQueueManager queueManager,
                                     ResponseMessageDispatcher messageDispatcher)
 {
     _concurrentHandlerLimit = concurrentHandlerLimit;
     _replyQueueName = replyQueueName;
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _logger = logger;
     _queueManager = queueManager;
     _messageDispatcher = messageDispatcher;
     _taskFactory = taskFactory;
 }
Ejemplo n.º 11
0
        protected LongRunningTaskWrapperBase(Task handlerTask,
                                             ILongRunningTask longRunningHandler,
                                             BrokeredMessage message,
                                             IClock clock,
                                             ILogger logger,
                                             INimbusTaskFactory taskFactory,
                                             TimeSpan messageLockDuration)
        {
            HandlerTask         = handlerTask;
            _longRunningHandler = longRunningHandler;
            _message            = message;
            _clock  = clock;
            _logger = logger;
            _messageLockDuration = messageLockDuration;
            _taskFactory         = taskFactory;

            _logger.Debug("Long-lived task wrapper created for message {MessageId}", message.MessageId);
        }
Ejemplo n.º 12
0
 internal ResponseMessagePumpFactory(ConcurrentHandlerLimitSetting concurrentHandlerLimit,
                                     ReplyQueueNameSetting replyQueueName,
                                     IClock clock,
                                     IDispatchContextManager dispatchContextManager,
                                     ILogger logger,
                                     INimbusTaskFactory taskFactory,
                                     IQueueManager queueManager,
                                     ResponseMessageDispatcher messageDispatcher)
 {
     _concurrentHandlerLimit = concurrentHandlerLimit;
     _replyQueueName         = replyQueueName;
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _logger            = logger;
     _queueManager      = queueManager;
     _messageDispatcher = messageDispatcher;
     _taskFactory       = taskFactory;
 }
Ejemplo n.º 13
0
        protected LongRunningTaskWrapperBase(Task handlerTask,
                                             ILongRunningTask longRunningHandler,
                                             BrokeredMessage message,
                                             IClock clock,
                                             ILogger logger,
                                             INimbusTaskFactory taskFactory,
                                             TimeSpan messageLockDuration)
        {
            HandlerTask = handlerTask;
            _longRunningHandler = longRunningHandler;
            _message = message;
            _clock = clock;
            _logger = logger;
            _messageLockDuration = messageLockDuration;
            _taskFactory = taskFactory;

            _logger.Debug("Long-lived task wrapper created for message {MessageId}", message.MessageId);
        }
Ejemplo n.º 14
0
 public RequestMessagePumpsFactory(IClock clock,
                                   IDispatchContextManager dispatchContextManager,
                                   IHandlerMapper handlerMapper,
                                   ILogger logger,
                                   IMessageDispatcherFactory messageDispatcherFactory,
                                   INimbusMessagingFactory messagingFactory,
                                   INimbusTaskFactory taskFactory,
                                   IRouter router,
                                   ITypeProvider typeProvider)
 {
     _logger = logger;
     _messageDispatcherFactory = messageDispatcherFactory;
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _handlerMapper          = handlerMapper;
     _typeProvider           = typeProvider;
     _taskFactory            = taskFactory;
     _messagingFactory       = messagingFactory;
     _router = router;
 }
Ejemplo n.º 15
0
 public RequestMessagePumpsFactory(IClock clock,
                                   IDispatchContextManager dispatchContextManager,
                                   IHandlerMapper handlerMapper,
                                   ILogger logger,
                                   IMessageDispatcherFactory messageDispatcherFactory,
                                   INimbusMessagingFactory messagingFactory,
                                   INimbusTaskFactory taskFactory,
                                   IRouter router,
                                   ITypeProvider typeProvider)
 {
     _logger = logger;
     _messageDispatcherFactory = messageDispatcherFactory;
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _handlerMapper = handlerMapper;
     _typeProvider = typeProvider;
     _taskFactory = taskFactory;
     _messagingFactory = messagingFactory;
     _router = router;
 }
Ejemplo n.º 16
0
 public MessageDispatcherFactory(DefaultMessageLockDurationSetting defaultMessageLockDuration,
                                 IBrokeredMessageFactory brokeredMessageFactory,
                                 IClock clock,
                                 IDependencyResolver dependencyResolver,
                                 IInboundInterceptorFactory inboundInterceptorFactory,
                                 ILogger logger,
                                 INimbusMessagingFactory messagingFactory,
                                 INimbusTaskFactory taskFactory,
                                 IOutboundInterceptorFactory outboundInterceptorFactory,
                                 IPropertyInjector propertyInjector)
 {
     _brokeredMessageFactory = brokeredMessageFactory;
     _clock = clock;
     _dependencyResolver        = dependencyResolver;
     _inboundInterceptorFactory = inboundInterceptorFactory;
     _logger                     = logger;
     _messagingFactory           = messagingFactory;
     _outboundInterceptorFactory = outboundInterceptorFactory;
     _defaultMessageLockDuration = defaultMessageLockDuration;
     _taskFactory                = taskFactory;
     _propertyInjector           = propertyInjector;
 }
 public CompetingEventMessagePumpsFactory(ApplicationNameSetting applicationName,
                                          IClock clock,
                                          IDispatchContextManager dispatchContextManager,
                                          IHandlerMapper handlerMapper,
                                          ILogger logger,
                                          IMessageDispatcherFactory messageDispatcherFactory,
                                          INimbusMessagingFactory messagingFactory,
                                          INimbusTaskFactory taskFactory,
                                          IRouter router,
                                          ITypeProvider typeProvider)
 {
     _applicationName = applicationName;
     _clock = clock;
     _dispatchContextManager = dispatchContextManager;
     _handlerMapper = handlerMapper;
     _logger = logger;
     _messageDispatcherFactory = messageDispatcherFactory;
     _messagingFactory = messagingFactory;
     _router = router;
     _typeProvider = typeProvider;
     _taskFactory = taskFactory;
 }
Ejemplo n.º 18
0
 public MulticastRequestMessagePumpsFactory(ApplicationNameSetting applicationName,
                                            IClock clock,
                                            IDispatchContextManager dispatchContextManager,
                                            IHandlerMapper handlerMapper,
                                            ILogger logger,
                                            IMessageDispatcherFactory messageDispatcherFactory,
                                            INimbusMessagingFactory messagingFactory,
                                            INimbusTaskFactory taskFactory,
                                            IRouter router,
                                            ITypeProvider typeProvider)
 {
     _applicationName          = applicationName;
     _clock                    = clock;
     _dispatchContextManager   = dispatchContextManager;
     _handlerMapper            = handlerMapper;
     _logger                   = logger;
     _messageDispatcherFactory = messageDispatcherFactory;
     _messagingFactory         = messagingFactory;
     _router                   = router;
     _typeProvider             = typeProvider;
     _taskFactory              = taskFactory;
 }
Ejemplo n.º 19
0
 public MessageDispatcherFactory(DefaultMessageLockDurationSetting defaultMessageLockDuration,
                                 IBrokeredMessageFactory brokeredMessageFactory,
                                 IClock clock,
                                 IDependencyResolver dependencyResolver,
                                 IInboundInterceptorFactory inboundInterceptorFactory,
                                 ILogger logger,
                                 INimbusMessagingFactory messagingFactory,
                                 INimbusTaskFactory taskFactory,
                                 IOutboundInterceptorFactory outboundInterceptorFactory,
                                 IPropertyInjector propertyInjector)
 {
     _brokeredMessageFactory = brokeredMessageFactory;
     _clock = clock;
     _dependencyResolver = dependencyResolver;
     _inboundInterceptorFactory = inboundInterceptorFactory;
     _logger = logger;
     _messagingFactory = messagingFactory;
     _outboundInterceptorFactory = outboundInterceptorFactory;
     _defaultMessageLockDuration = defaultMessageLockDuration;
     _taskFactory = taskFactory;
     _propertyInjector = propertyInjector;
 }
Ejemplo n.º 20
0
        internal Bus(ILogger logger,
                     ICommandSender commandSender,
                     IRequestSender requestSender,
                     IMulticastRequestSender multicastRequestSender,
                     IEventSender eventSender,
                     IMessagePumpsManager messagePumpsManager,
                     IDeadLetterQueues deadLetterQueues,
                     INimbusTaskFactory taskFactory,
                     IHeartbeat heartbeat)
        {
            _logger                 = logger;
            _commandSender          = commandSender;
            _requestSender          = requestSender;
            _multicastRequestSender = multicastRequestSender;
            _eventSender            = eventSender;
            _deadLetterQueues       = deadLetterQueues;
            _taskFactory            = taskFactory;
            _heartbeat              = heartbeat;
            _messagePumpsManager    = messagePumpsManager;

            Started  += async delegate { await _heartbeat.Start(); };
            Stopping += async delegate { await _heartbeat.Stop(); };
        }
        protected override async Task <LongRunningTaskWrapper> Given()
        {
            _slowCommand                = new SlowCommand();
            _handler                    = new SlowCommandHandler();
            _brokeredMessage            = new BrokeredMessage(_slowCommand);
            _clock                      = new SystemClock();
            _logger                     = new ConsoleLogger();
            _defaultMessageLockDuration = new DefaultMessageLockDurationSetting();
            _taskFactory                = new NimbusTaskFactory(new MaximumThreadPoolThreadsSetting(), new MinimumThreadPoolThreadsSetting(), _logger);

            _renewLockCalled = false;
            _handlerTask     = _handler.Handle(_slowCommand);

            LongRunningTaskWrapperBase.RenewLockStrategy = async m =>
            {
                _renewLockCalled = true;
                _lockedUntil     = _clock.UtcNow.AddSeconds(1);
                _handler.PretendToBeWorkingSemaphore.Release();
            };
            LongRunningTaskWrapperBase.LockedUntilUtcStrategy = m => _lockedUntil;

            _lockedUntil = DateTimeOffset.UtcNow.AddSeconds(1);
            return(new LongRunningTaskWrapper(_handlerTask, _handler, _brokeredMessage, _clock, _logger, _defaultMessageLockDuration, _taskFactory));
        }