예제 #1
0
        EQueueConsumer CreateQueueConsumer(string commandQueueName, string consumerId, int fullLoadThreshold, int waitInterval)
        {
            var consumer = new EQueueConsumer(BrokerAddress, ConsumerPort, AdminPort, commandQueueName, commandQueueName, consumerId, fullLoadThreshold, waitInterval);

            consumer.Start();
            return(consumer);
        }
예제 #2
0
        EQueueConsumer CreateSubscriptionClient(string topic, string subscriptionName, string consumerId = null, int fullLoadThreshold = 1000, int waitInterval = 1000)
        {
            var consumer = new EQueueConsumer(BrokerAddress, ConsumerPort, AdminPort, topic, subscriptionName, consumerId, fullLoadThreshold, waitInterval);

            consumer.Start();
            return(consumer);
        }
예제 #3
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);
        }
예제 #4
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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
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
        }