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(); }
public static void Register <TMessageHandler>( this IMessageHandlersRegistry messageHandlersRegistry) where TMessageHandler : IMessageHandler { messageHandlersRegistry.Register(typeof(TMessageHandler)); }
public static (Handle <IMessage>, Type) HandlerDelegateFor( this IMessageHandlersRegistry messageHandlersRegistry, Type messageType) => messageHandlersRegistry.MessageTypeToDelegateType[messageType];