public DefaultMessageRouter(
            IMessageReceiver messageReceiver,
            IMessageHandlersRegistry messageHandlersRegistry,
            ILogger <DefaultMessageRouter> logger,
            IServiceProvider serviceProvider)
        {
            _messageReceiver         = messageReceiver;
            _messageHandlersRegistry = messageHandlersRegistry;
            _serviceProvider         = serviceProvider;

            _logger       = logger;
            _runningTasks = new ConcurrentDictionary <int, RunningTask>();
        }
        public RabbitMQMessageReceiver(
            IConnectionFactory connectionFactory,
            TaskFactory taskFactory,
            IMessageHandlersRegistry messageHandlersRegistry,
            ILoggerFactory loggerFactory,
            IMessagePacker messagePacker)
        {
            _memoryPipe = new BlockingCollection <HandlingProcessFor <IMessage> >();
            _connection = new Lazy <IConnection>(() =>
            {
                var logger = _loggerFactory.CreateLogger <RabbitMQMessageReceiver>();

                var tryCount = 0;
                var timeOut  = TimeSpan.FromSeconds(4);

                while (tryCount != 20)
                {
                    Interlocked.Increment(ref tryCount);
                    try
                    {
                        var connection = connectionFactory.CreateConnection(Assembly.GetEntryAssembly().FullName);
                        logger.LogTrace("Connection is succesfull => {connection}", connection);
                        return(connection);
                    }
                    catch (BrokerUnreachableException e)
                    {
                        logger.LogError("Can't connect to the RabbitMq bus. Trying to reconnect in {timeOut} | Try[{tryCount}]. Exception {e}", timeOut, tryCount, e);
                        Task.Delay(timeOut).GetAwaiter().GetResult();
                    }
                }
                throw new Exception("No connection to the event bus");
            });

            _taskFactory   = taskFactory;
            _loggerFactory = loggerFactory;
            _messagePacker = messagePacker;

            RegisterAll(messageHandlersRegistry.MessageTypeToDelegateType);
        }
 public void Initialize(IMessageHandlersRegistry <TContext> messageHandlersRegistry)
 {
     _messageHandlersRegistry = messageHandlersRegistry;
     Initialize();
 }
示例#4
0
 public static void Register <TMessageHandler>(
     this IMessageHandlersRegistry messageHandlersRegistry) where TMessageHandler : IMessageHandler
 {
     messageHandlersRegistry.Register(typeof(TMessageHandler));
 }
示例#5
0
 public static (Handle <IMessage>, Type) HandlerDelegateFor(
     this IMessageHandlersRegistry messageHandlersRegistry,
     Type messageType) => messageHandlersRegistry.MessageTypeToDelegateType[messageType];