public IMessageConsumer CreateTopicSubscription(string[] topics,
                                                        string subscriptionName,
                                                        OnMessagesReceived onMessagesReceived,
                                                        string consumerId,
                                                        ConsumerConfig consumerConfig,
                                                        bool start = true)
        {
            var channel   = _connection.CreateModel();
            var queueName = channel.QueueDeclare(subscriptionName, true, false, false, null).QueueName;

            topics.ForEach(topic =>
            {
                topic = Configuration.Instance.FormatMessageQueueName(topic);
                channel.ExchangeDeclare(topic, ExchangeType.Fanout, true, false, null);
                channel.QueueBind(queueName,
                                  topic,
                                  string.Empty);
            });

            var subscriber = new RabbitMQConsumer(channel,
                                                  topics,
                                                  queueName,
                                                  consumerId,
                                                  BuildOnRabbitMQMessageReceived(onMessagesReceived),
                                                  consumerConfig);

            if (start)
            {
                subscriber.Start();
            }

            return(subscriber);
        }
Example #2
0
 public ICommitOffsetable StartQueueClient(string commandQueueName,
                                           string consumerId,
                                           OnMessagesReceived onMessagesReceived,
                                           ConsumerConfig consumerConfig = null)
 {
     throw new NotImplementedException();
 }
        public IMessageConsumer CreateQueueConsumer(string commandQueueName,
                                                    OnMessagesReceived onMessagesReceived,
                                                    string consumerId,
                                                    ConsumerConfig consumerConfig,
                                                    bool start = true)
        {
            var channel = _connection.CreateModel();

            commandQueueName = Configuration.Instance.FormatMessageQueueName(commandQueueName);

            channel.QueueDeclare(commandQueueName, true, false, false, null);
            channel.BasicQos(0, (ushort)consumerConfig.FullLoadThreshold, false);
            var consumer = new RabbitMQConsumer(channel,
                                                new [] { commandQueueName },
                                                commandQueueName,
                                                consumerId,
                                                BuildOnRabbitMQMessageReceived(onMessagesReceived),
                                                consumerConfig);

            if (start)
            {
                consumer.Start();
            }

            return(consumer);
        }
Example #4
0
        private void HandleBotResponse(object sender, BotResponseEventArgs e)
        {
            Debug.Log($"Response from Bot of type: {e.EventType}");

            switch (e.EventType)
            {
            case EventTypes.None:
                break;

            case EventTypes.ConversationStarted:
                OnConversationStarted?.Invoke(this, e.ConversationId);
                break;

            case EventTypes.MessageSent:
                OnMessageSent?.Invoke(this, e.SentMessageId);
                break;

            case EventTypes.MessageReceived:
                OnMessagesReceived?.Invoke(this, e.Messages);
                break;

            case EventTypes.Error:
                break;
            }
        }
Example #5
0
 public SubscriptionConsumer(string id,
                             OnMessagesReceived onMessagesReceived,
                             SubscriptionClient subscriptionClient)
     : base(id, onMessagesReceived)
 {
     _subscriptionClient = subscriptionClient;
 }
Example #6
0
 public ICommitOffsetable StartSubscriptionClient(string topic,
                                                  string subscriptionName,
                                                  string consumerId,
                                                  OnMessagesReceived onMessagesReceived,
                                                  ConsumerConfig consumerConfig = null)
 {
     throw new NotImplementedException();
 }
Example #7
0
 public IMessageConsumer CreateQueueConsumer(string commandQueueName,
                                             OnMessagesReceived onMessagesReceived,
                                             string consumerId,
                                             ConsumerConfig consumerConfig,
                                             bool start = true)
 {
     throw new NotImplementedException();
 }
Example #8
0
        void ReceiveMessages(CancellationTokenSource cancellationTokenSource, OnMessagesReceived onMessagesReceived, EQueueConsumer equeueConsumer)
        {
            IEnumerable <EQueueMessages.QueueMessage> messages = null;

            #region peek messages that not been consumed since last time
            while (!cancellationTokenSource.IsCancellationRequested)
            {
                try
                {
                    messages = equeueConsumer.PullMessages(100, 2000, cancellationTokenSource.Token);
                    foreach (var message in messages)
                    {
                        try
                        {
                            var equeueMessage  = Encoding.UTF8.GetString(message.Body).ToJsonObject <EQueueMessage>();
                            var messageContext = new MessageContext(equeueMessage, message.QueueId, message.QueueOffset);
                            equeueConsumer.AddMessage(message);
                            onMessagesReceived(messageContext);
                            equeueConsumer.BlockIfFullLoad();
                        }
                        catch (OperationCanceledException)
                        {
                            return;
                        }
                        catch (ThreadAbortException)
                        {
                            return;
                        }
                        catch (Exception ex)
                        {
                            if (message.Body != null)
                            {
                                equeueConsumer.RemoveMessage(message.QueueId, message.QueueOffset);
                            }
                            _logger.Error(ex.GetBaseException().Message, ex);
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    return;
                }
                catch (ThreadAbortException)
                {
                    return;
                }
                catch (Exception ex)
                {
                    if (!cancellationTokenSource.IsCancellationRequested)
                    {
                        Thread.Sleep(1000);
                        _logger.Error(ex.GetBaseException().Message, ex);
                    }
                }
            }
            #endregion
        }
Example #9
0
 public IMessageConsumer CreateTopicSubscription(string topic,
                                                 string subscriptionName,
                                                 OnMessagesReceived onMessagesReceived,
                                                 string consumerId,
                                                 ConsumerConfig consumerConfig,
                                                 bool start = true)
 {
     throw new NotImplementedException();
 }
Example #10
0
        void ReceiveMessages(CancellationTokenSource cancellationTokenSource, OnMessagesReceived onMessagesReceived, KafkaConsumer kafkaConsumer)
        {
            IEnumerable <Kafka.Client.Messages.Message> messages = null;

            #region peek messages that not been consumed since last time
            while (!cancellationTokenSource.IsCancellationRequested)
            {
                try
                {
                    messages = kafkaConsumer.GetMessages(cancellationTokenSource.Token);
                    foreach (var message in messages)
                    {
                        try
                        {
                            var kafkaMessage   = Encoding.UTF8.GetString(message.Payload).ToJsonObject <KafkaMessage>();
                            var messageContext = new MessageContext(kafkaMessage, message.PartitionId.Value, message.Offset);
                            kafkaConsumer.AddMessage(message);
                            onMessagesReceived(messageContext);
                            kafkaConsumer.BlockIfFullLoad();
                        }
                        catch (OperationCanceledException)
                        {
                            return;
                        }
                        catch (ThreadAbortException)
                        {
                            return;
                        }
                        catch (Exception ex)
                        {
                            if (message.Payload != null)
                            {
                                kafkaConsumer.RemoveMessage(message.PartitionId.Value, message.Offset);
                            }
                            _logger.Error(ex.GetBaseException().Message, ex);
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    return;
                }
                catch (ThreadAbortException)
                {
                    return;
                }
                catch (Exception ex)
                {
                    if (!cancellationTokenSource.IsCancellationRequested)
                    {
                        Thread.Sleep(1000);
                        _logger.Error(ex.GetBaseException().Message, ex);
                    }
                }
            }
            #endregion
        }
 private OnRabbitMQMessageReceived BuildOnRabbitMQMessageReceived(OnMessagesReceived onMessagesReceived)
 {
     return((consumer, args) =>
     {
         var message = Encoding.UTF8.GetString(args.Body).ToJsonObject <RabbitMQMessage>();
         var messageContext = new MessageContext(message, new MessageOffset(string.Empty, args.Exchange, 0, (long)args.DeliveryTag));
         onMessagesReceived(messageContext);
     });
 }
Example #12
0
 private OnEQueueMessageReceived BuildOnEQueueMessageReceived(OnMessagesReceived onMessagesReceived)
 {
     return((consumer, message) =>
     {
         var equeueMessage = Encoding.UTF8.GetString(message.Body).ToJsonObject <EQueueMessage>();
         var messageContext = new MessageContext(equeueMessage, message.QueueId, message.QueueOffset);
         onMessagesReceived(messageContext);
     });
 }
Example #13
0
        public IMessageConsumer StartQueueClient(string commandQueueName,
                                                 string consumerId,
                                                 OnMessagesReceived onMessagesReceived,
                                                 ConsumerConfig consumerConfig = null)
        {
            commandQueueName = Configuration.Instance.FormatMessageQueueName(commandQueueName);
            var queue       = CommandQueues.GetOrAdd(commandQueueName, key => new BlockingCollection <IMessageContext>());
            var queueClient = new QueueClient(commandQueueName, consumerId, onMessagesReceived, queue);

            return(queueClient);
        }
Example #14
0
        public ICommitOffsetable StartQueueClient(string commandQueueName,
                                                  string consumerId,
                                                  OnMessagesReceived onMessagesReceived,
                                                  ConsumerConfig consumerConfig = null)
        {
            commandQueueName = $"{commandQueueName}.{consumerId}";
            commandQueueName = Configuration.Instance.FormatMessageQueueName(commandQueueName);
            var commandQueueClient = CreateQueueClient(commandQueueName);

            return(new QueueConsumer(commandQueueName, onMessagesReceived, commandQueueClient));
        }
Example #15
0
 public SubscriptionClient(string topic, string subscriptionName, string consumerId, OnMessagesReceived onMessagesReceived, bool start = true)
 {
     _topic            = topic;
     _subscriptionName = subscriptionName;
     Id = consumerId;
     _onMessagesReceived = onMessagesReceived;
     if (start)
     {
         Start();
     }
 }
Example #16
0
 public IMessageConsumer StartSubscriptionClient(string topic,
                                                 string subscriptionName,
                                                 string consumerId,
                                                 OnMessagesReceived onMessagesReceived,
                                                 ConsumerConfig consumerConfig = null)
 {
     return(StartSubscriptionClient(new[] { topic },
                                    subscriptionName,
                                    consumerId,
                                    onMessagesReceived,
                                    consumerConfig));
 }
Example #17
0
        private EQueueConsumer CreateSubscriptionClient(string topic,
                                                        string subscriptionName,
                                                        OnMessagesReceived onMessagesReceived,
                                                        string consumerId             = null,
                                                        ConsumerConfig consumerConfig = null)
        {
            var consumer = new EQueueConsumer(ClusterName, NameServerList, topic, subscriptionName, consumerId,
                                              BuildOnEQueueMessageReceived(onMessagesReceived),
                                              consumerConfig);

            return(consumer);
        }
Example #18
0
        public ICommitOffsetable StartSubscriptionClient(string topic,
                                                         string subscriptionName,
                                                         string consumerId,
                                                         OnMessagesReceived onMessagesReceived,
                                                         ConsumerConfig consumerConfig = null)
        {
            topic            = Configuration.Instance.FormatMessageQueueName(topic);
            subscriptionName = Configuration.Instance.FormatMessageQueueName(subscriptionName);
            var subscriptionClient = CreateSubscriptionClient(topic, subscriptionName);

            return(new SubscriptionConsumer($"{topic}.{subscriptionName}", onMessagesReceived, subscriptionClient));
        }
Example #19
0
        private EQueueConsumer CreateQueueConsumer(string commandQueueName,
                                                   string consumerId,
                                                   OnMessagesReceived onMessagesReceived,
                                                   ConsumerConfig consumerConfig = null)
        {
            var consumer = new EQueueConsumer(ClusterName, NameServerList, commandQueueName,
                                              commandQueueName, consumerId,
                                              BuildOnEQueueMessageReceived(onMessagesReceived),
                                              consumerConfig);

            return(consumer);
        }
Example #20
0
        public ICommitOffsetable StartQueueClient(string commandQueueName,
                                                  string consumerId,
                                                  OnMessagesReceived onMessagesReceived,
                                                  ConsumerConfig consumerConfig = null)
        {
            commandQueueName = Configuration.Instance.FormatMessageQueueName(commandQueueName);
            consumerId       = Configuration.Instance.FormatMessageQueueName(consumerId);
            var queueConsumer = CreateQueueConsumer(commandQueueName, consumerId, onMessagesReceived, consumerConfig);

            _queueConsumers.Add(queueConsumer);
            return(queueConsumer);
        }
 private KafkaConsumer <string, KafkaMessage> CreateSubscriptionClient(string topic,
                                                                       string subscriptionName,
                                                                       OnMessagesReceived onMessagesReceived,
                                                                       string consumerId             = null,
                                                                       ConsumerConfig consumerConfig = null)
 {
     CreateTopicIfNotExists(topic);
     return(new KafkaConsumer <string, KafkaMessage>(_brokerList, topic, subscriptionName, consumerId,
                                                     BuildOnKafkaMessageReceived(onMessagesReceived),
                                                     new StringDeserializer(Encoding.UTF8),
                                                     new KafkaMessageDeserializer(),
                                                     consumerConfig));
 }
        private KafkaConsumer <string, KafkaMessage> CreateQueueConsumer(string queue,
                                                                         OnMessagesReceived onMessagesReceived,
                                                                         string consumerId             = null,
                                                                         ConsumerConfig consumerConfig = null)
        {
            CreateTopicIfNotExists(queue);
            var queueConsumer = new KafkaConsumer <string, KafkaMessage>(_brokerList, queue, $"{queue}.consumer", consumerId,
                                                                         BuildOnKafkaMessageReceived(onMessagesReceived),
                                                                         new StringDeserializer(Encoding.UTF8),
                                                                         new KafkaMessageDeserializer(),
                                                                         consumerConfig);

            return(queueConsumer);
        }
Example #23
0
 public QueueClient(string queue,
                    string consumerId,
                    OnMessagesReceived onMessagesReceived,
                    BlockingCollection <IMessageContext> messageQueue,
                    bool start = true)
 {
     _queue              = queue;
     _messageQueue       = messageQueue;
     Id                  = consumerId;
     _onMessagesReceived = onMessagesReceived;
     if (start)
     {
         Start();
     }
 }
Example #24
0
        public IMessageConsumer StartQueueClient(string commandQueueName,
                                                 string consumerId,
                                                 OnMessagesReceived onMessagesReceived,
                                                 ConsumerConfig consumerConfig = null)
        {
            commandQueueName = Configuration.Instance.FormatMessageQueueName(commandQueueName);
            consumerId       = Configuration.Instance.FormatMessageQueueName(consumerId);
            var queueConsumer = _clientProvider.CreateQueueConsumer(commandQueueName,
                                                                    onMessagesReceived,
                                                                    consumerId,
                                                                    consumerConfig);

            QueueConsumers.Add(queueConsumer);
            return(queueConsumer);
        }
        public IMessageConsumer CreateQueueConsumer(string queue,
                                                    OnMessagesReceived onMessagesReceived,
                                                    string consumerId,
                                                    ConsumerConfig consumerConfig,
                                                    bool start = true)
        {
            var consumer = new KafkaConsumer <string, KafkaMessage>(_brokerList, new [] { queue }, $"{queue}.consumer", consumerId,
                                                                    BuildOnKafkaMessageReceived(onMessagesReceived),
                                                                    consumerConfig);

            if (start)
            {
                consumer.Start();
            }
            return(consumer);
        }
        public IMessageConsumer CreateTopicSubscription(string[] topics,
                                                        string subscriptionName,
                                                        OnMessagesReceived onMessagesReceived,
                                                        string consumerId,
                                                        ConsumerConfig consumerConfig,
                                                        bool start = true)
        {
            var consumer = new KafkaConsumer <string, KafkaMessage>(_brokerList, topics, subscriptionName, consumerId,
                                                                    BuildOnKafkaMessageReceived(onMessagesReceived),
                                                                    consumerConfig);

            if (start)
            {
                consumer.Start();
            }
            return(consumer);
        }
Example #27
0
        public IMessageConsumer StartSubscriptionClient(string[] topics,
                                                        string subscriptionName,
                                                        string consumerId,
                                                        OnMessagesReceived onMessagesReceived,
                                                        ConsumerConfig consumerConfig = null)
        {
            topics = topics.Select(topic => Configuration.Instance.FormatMessageQueueName(topic))
                     .ToArray();
            var client = new SubscriptionClient(topics, subscriptionName, consumerId, onMessagesReceived);

            topics.ForEach(topic =>
            {
                var clients = SubscriptionClients.GetOrAdd(topic, key => new List <SubscriptionClient>());
                clients.Add(client);
            });
            return(client);
        }
Example #28
0
        public IMessageConsumer StartSubscriptionClient(string[] topics,
                                                        string subscriptionName,
                                                        string consumerId,
                                                        OnMessagesReceived onMessagesReceived,
                                                        ConsumerConfig consumerConfig = null)
        {
            topics = topics.Select(topic => Configuration.Instance.FormatMessageQueueName(topic))
                     .ToArray();
            subscriptionName = Configuration.Instance.FormatMessageQueueName(subscriptionName);
            var topicSubscription = _clientProvider.CreateTopicSubscription(topics,
                                                                            subscriptionName,
                                                                            onMessagesReceived,
                                                                            consumerId,
                                                                            consumerConfig);

            Subscribers.Add(topicSubscription);
            return(topicSubscription);
        }
        public IMessageConsumer CreateQueueConsumer(string commandQueueName,
                                                    OnMessagesReceived onMessagesReceived,
                                                    string consumerId,
                                                    ConsumerConfig consumerConfig,
                                                    bool start = true)
        {
            var consumer = new EQueueConsumer(_clusterName,
                                              _nameServerList,
                                              new[] { commandQueueName },
                                              commandQueueName,
                                              consumerId,
                                              BuildOnEQueueMessageReceived(onMessagesReceived),
                                              consumerConfig);

            if (start)
            {
                consumer.Start();
            }

            return(consumer);
        }
        public IMessageConsumer CreateTopicSubscription(string[] topics,
                                                        string subscriptionName,
                                                        OnMessagesReceived onMessagesReceived,
                                                        string consumerId,
                                                        ConsumerConfig consumerConfig,
                                                        bool start = true)
        {
            var consumer = new EQueueConsumer(_clusterName,
                                              _nameServerList,
                                              topics,
                                              subscriptionName,
                                              consumerId,
                                              BuildOnEQueueMessageReceived(onMessagesReceived),
                                              consumerConfig);

            if (start)
            {
                consumer.Start();
            }

            return(consumer);
        }