示例#1
0
 public static Task CreateConsumerTask(string commandQueue, string consumerId, CancellationTokenSource cancellationTokenSource)
 {
     return(Task.Run(() =>
     {
         var consumer = new KafkaConsumer(zkConnectionString, commandQueue, $"{Environment.MachineName}.{commandQueue}", consumerId);
         try
         {
             foreach (var kafkaMessage in consumer.GetMessages(cancellationTokenSource.Token))
             {
                 var message = Encoding.UTF8.GetString(kafkaMessage.Payload);
                 var sendTime = DateTime.Parse(message);
                 Console.WriteLine($"consumer:{consumer.ConsumerId} {DateTime.Now.ToString("HH:mm:ss.fff")} consume message: {message} cost: {(DateTime.Now - sendTime).TotalMilliseconds}");
                 consumer.CommitOffset(kafkaMessage.PartitionId.Value, kafkaMessage.Offset);
             }
         }
         catch (OperationCanceledException)
         {
             return;
         }
         catch (ThreadAbortException)
         {
             return;
         }
         catch (Exception ex)
         {
             if (!cancellationTokenSource.IsCancellationRequested)
             {
                 Console.WriteLine(ex.GetBaseException().Message);
             }
         }
         finally
         {
             consumer.Stop();
         }
     }));
 }