private void ReceiveMessages(CancellationTokenSource cancellationTokenSource, OnEQueueMessageReceived onMessageReceived) { IEnumerable <EQueueMessages.QueueMessage> messages = null; #region peek messages that not been consumed since last time while (!cancellationTokenSource.IsCancellationRequested) { try { messages = PullMessages(100, 2000, cancellationTokenSource.Token); foreach (var message in messages) { try { AddMessage(message); onMessageReceived(this, message); BlockIfFullLoad(); } catch (OperationCanceledException) { return; } catch (ThreadAbortException) { return; } catch (Exception ex) { if (message.Body != null) { 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 }
public EQueueConsumer(string clusterName, List <IPEndPoint> nameServerList, string[] topics, string groupId, string consumerId, OnEQueueMessageReceived onMessageReceived, ConsumerConfig consumerConfig = null, bool start = true) : base(topics, groupId, consumerId, consumerConfig) { _onMessageReceived = onMessageReceived; ClusterName = clusterName; NameServerList = nameServerList; SlidingDoors = new ConcurrentDictionary <string, SlidingDoor>(); }
private static EQueueConsumer CreateConsumer(string consumerId) { OnEQueueMessageReceived onMessageReceived = (equeueConsumer, queueMessage) => { var message = Encoding.UTF8.GetString(queueMessage.Body); var sendTime = DateTime.Parse(message); Console.WriteLine( $"consumer:{equeueConsumer.ConsumerId} {DateTime.Now.ToString("HH:mm:ss.fff")} consume message: {message} cost: {(DateTime.Now - sendTime).TotalMilliseconds}"); equeueConsumer.CommitOffset(queueMessage.BrokerName, queueMessage.QueueId, queueMessage.QueueOffset); }; var consumer = new EQueueConsumer(clusterName, NameServerList, topic, Environment.MachineName, consumerId, onMessageReceived); return(consumer); }
public EQueueConsumer(string clusterName, List <IPEndPoint> nameServerList, string topic, string groupId, string consumerId, OnEQueueMessageReceived onMessageReceived, ConsumerConfig consumerConfig = null, bool start = true) { _onMessageReceived = onMessageReceived; ClusterName = clusterName; _consumerConfig = consumerConfig ?? ConsumerConfig.DefaultConfig; NameServerList = nameServerList; SlidingDoors = new ConcurrentDictionary <int, SlidingDoor>(); Topic = topic; GroupId = groupId; ConsumerId = consumerId ?? string.Empty; if (start) { Start(); } }