示例#1
0
 /// <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);
     }
 }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
 }
示例#6
0
 /// <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;