/// <summary> /// Validates the specified handler. /// </summary> /// <typeparam name="T">Type of the message to process.</typeparam> /// <param name="handler">The handler.</param> /// <exception cref="EventBusException"></exception> private void ValidateMessageHandler <T>(IEventBusMessageHandler <T> handler) where T : IEventBusMessage { if (!handler.IsValid()) { string logMessage = $"Can't add invalid handler for message tag {handler.MessageTagInfo.MessageTagString} " + $"and event id {handler.MessageEventId} " + $"from {handler.CreatorId}; please, set all needed fields properly."; throw new EventBusException(logMessage); } }
/// <summary> /// Adds the event message hanlder for the specific message event ID. /// </summary> /// <param name="handler">The handler.</param> public void AddMessageHanlder <T>(IEventBusMessageHandler <T> handler) where T : IEventBusMessage { this.ValidateMessageHandler(handler); if (!this.Connect()) { throw new EventBusException($"Can't establish connection to finish adding message handler for {handler}"); } this.EventHandlers.Add(handler as IEventBusMessageHandler <IEventBusMessage>); this.OnMessageHandlerAdd(handler); }
/// <summary> /// Performs bus-specific ops after addition of event message handler. /// </summary> /// <typeparam name="T">Type of the message to process.</typeparam> /// <param name="handler">The handler.</param> protected override void OnMessageHandlerAdd <T>(IEventBusMessageHandler <T> handler) { string messageQueue = handler.MessageTagInfo.MessageTagString; if (this.EventHandlers.Count(h => h.MessageTagInfo.MessageTagString == handler.MessageTagInfo.MessageTagString) == 1) { this.subscriberChannel.ExchangeDeclare(this.BusId, ExchangeType.Direct); string tag = this.subscriberChannel.BasicConsume(messageQueue, false, this.basicConsumer); consumerTags[messageQueue] = tag; } this.subscriberChannel.QueueBind(messageQueue, this.BusId, handler.MessageEventId); }
/// <summary> /// Performs bus-specific ops after addition of event message handler. /// </summary> /// <param name="handler">The handler.</param> protected override void OnMessageHandlerAdd <T>(IEventBusMessageHandler <T> handler) { List <string> subscriptions = this.consumer.Subscription ?? new List <string>(); string topic = handler.MessageTagInfo.MessageTagString; if (!subscriptions.Contains(topic)) { subscriptions.Add(topic); this.consumer.Subscribe(subscriptions); } if (this.EventHandlers.Count == 1) { this.StartNewPoll(); } }
/// <summary> /// Performs bus-specific ops after addition of event message handler. /// </summary> /// <typeparam name="T">Type of the message to process.</typeparam> /// <param name="handler">The handler.</param> protected override void OnMessageHandlerAdd <T>(IEventBusMessageHandler <T> handler) { this.pubSubClient.Subscribe(new RedisChannel(handler.MessageEventId, RedisChannel.PatternMode.Literal), this.handlerAction); }
/// <summary> /// Performs bus-specific ops after addition of event message handler. /// </summary> /// <typeparam name="T">Type of the message to process.</typeparam> /// <param name="handler">The handler.</param> protected abstract void OnMessageHandlerAdd <T>(IEventBusMessageHandler <T> handler) where T : IEventBusMessage;