C#实现kafka消息队列-Confluent.Kafka

1 篇文章 0 订阅

本文是C#引用Confluent.Kafka.dll实现kafka消息队列的实际开发例子

项目需要实现对Kafka的操作,看了很多博客基本上都是旧的方法,代码不可用,所以重新写一篇调用的方法,不足之处多多指出

一、开发环境

IDE:VS2017

.Net Framwork:4.5

Confluent.Kafka:1.3.0

二、测试代码,仅供参考

private readonly static string mTopick = "test";
private readonly static string mBootstrapServers = "localhost:9092";

/// <summary>
/// 生产者
/// </summary>
public static void Produce()
{
    var config = new ProducerConfig { BootstrapServers = mBootstrapServers };
    Action<DeliveryReport<Null, string>> handler = r =>
    Console.WriteLine(!r.Error.IsError
        ? $"Delivered message to {r.TopicPartitionOffset}"
        : $"Delivery Error: {r.Error.Reason}");
    var producerBuilder = new ProducerBuilder<Null, string>(config);
    // 错误日志监视
    producerBuilder.SetErrorHandler((p, msg) =>
    {
         Console.WriteLine($"Producer_Erro信息:Code:{msg.Code};Reason:{msg.Reason};IsError:{msg.IsError}");
    });

    using (var producer = producerBuilder.Build())
    {
         for (int i = 0; i < 5; i++)
         {
         // 异步发送消息到主题
         producer.Produce(mTopick, new Message<Null, string> { Value = i.ToString() }, handler);
         }
         // 3后 Flush到磁盘
         producer.Flush(TimeSpan.FromSeconds(3));
     }
}

/// <summary>
/// 消费者
/// </summary>
public static void Consumer()
{
     var conf = new ConsumerConfig
     {
        GroupId = "test-consumer-group",
        BootstrapServers = mBootstrapServers,
        AutoOffsetReset = AutoOffsetReset.Earliest,
        EnableAutoCommit = false  // 设置非自动偏移,业务逻辑完成后手动处理偏移,防止数据丢失
     };
     var consumerBuilder = new ConsumerBuilder<Ignore, string>(conf);
     // 错误日志监视
     consumerBuilder.SetErrorHandler((p, msg) =>
     {
          Console.WriteLine($"Consumer_Error信息:Code:{msg.Code};Reason:{msg.Reason};IsError:{msg.IsError}");
     });
     using (var consumer = consumerBuilder.Build())
     {
          // 订阅topic
          consumer.Subscribe(mTopick);
          while (true)
          {
               try
               {
                  var consume = consumer.Consume();
                  string receiveMsg = consume.Value;
                  Console.WriteLine($"Consumed message '{receiveMsg}' at: '{consume.TopicPartitionOffset}'.");
                   // 开始我的业务逻辑
                   //...
                   // 业务结束
                   if (true)
                   {
                        consumer.Commit(new List<TopicPartitionOffset>() { consume.TopicPartitionOffset }); //手动提交偏移
                   }
                }
                catch (ConsumeException e)
                {
                    Console.WriteLine($"Consumer_Error occured: {e.Error.Reason}");
                }
         }
    }
}

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值