Kafka开发--C#生产和消费消息

61 篇文章 6 订阅
7 篇文章 1 订阅

        在前面的“Kafka配置1~Kafka配置6”文章中,我们详细的介绍了Kafka的安装、集群、SASL、SSL和账户权限的配置。该篇文章主要介绍使用C#向Kafka中生产和消费消息。

        在C#中,我们使用Confluent.Kafka库作为连接Kafka服务的“桥梁”,可自行在NuGet中下载,这里我们只做在C#中使用SASL+SSL的使用例子,更详细的使用方法可参考官网https://github.com/confluentinc/confluent-kafka-dotnet/

1、使用VS创建一个解决方案,名称如Quber.Test.Kafka,然后分别创建生产者项目(Quber.Test.KafkaProducer,Windows应用程序)和消费者项目(Quber.Test.KafkaConsumer,控制台应用程序)用于测试,项目结构如下所示:

2、生产者

        在Quber.Test.KafkaProducer项目中新建一个生产窗体FrmMain,窗体中增加一个输入框和发送按钮,然后在发送按钮事件中实现生产消息的逻辑,代码如下所示:

/// <summary>
/// 生产消息事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnSend_Click(object sender, EventArgs e)
{
	var msg = txtMain.Text.Trim();
	if (string.IsNullOrWhiteSpace(msg))
	{
		MessageBox.Show("发送内容不能为空!", "提示信息");
		txtMain.Focus();
		return;
	}

	//生产的主题
	var topicName = "TestTopic1";
	var config = new ProducerConfig
	{
		BootstrapServers = "192.168.3.200:9092,192.168.3.200:9093,192.168.3.200:9094",
		SecurityProtocol = SecurityProtocol.SaslSsl,
		SaslMechanism = SaslMechanism.Plain,
		SaslUsername = "quber2",                                   //SASL账户
		SaslPassword = "quber123456",                              //SASL密码     
		SslCaLocation = @"D:\Net_Program\Net_Kafka\04_SSL\ca-cert" //SSL证书
	};
	using (var p = new ProducerBuilder<Null, string>(config).Build())
	{
		try
		{
			//异步生产消息
			var dr = await p.ProduceAsync(topicName, new Message<Null, string> { Value = msg });
		}
		catch (ProduceException<Null, string> pe)
		{
			Console.ForegroundColor = ConsoleColor.Red;
			Console.WriteLine(pe.Error.Reason);
		}
	}
}

说明:上述代码中的quber2账户就是前面文章中提到的具有“写”权限的账户

 

3、消费者

        在Quber.Test.KafkaConsumer项目的Main函数中实现如下消费信息的代码逻辑即可:

static void Main(string[] args)
{
	//消费的主题
	var topicName = "TestTopic1";
	var conf = new ConsumerConfig
	{
		GroupId = "TestGroup2",                                   //消费的分组
		BootstrapServers = "192.168.3.200:9092,192.168.3.200:9093,192.168.3.200:9094",
		SecurityProtocol = SecurityProtocol.SaslSsl,
		SaslMechanism = SaslMechanism.Plain,
		AutoOffsetReset = AutoOffsetReset.Earliest,
		EnableAutoCommit = false,
		SaslUsername = "quber1",                                   //SASL账户
		SaslPassword = "quber123456",                              //SASL密码     
		SslCaLocation = @"D:\Net_Program\Net_Kafka\04_SSL\ca-cert" //SSL证书
	};

	using (var c = new ConsumerBuilder<Ignore, string>(conf)
		.SetErrorHandler((_, e) =>
		{
			Console.ForegroundColor = ConsoleColor.Yellow;
			Console.WriteLine("连接出错:" + e.Reason);
		})
		.Build())
	{
		c.Subscribe(topicName);

		CancellationTokenSource cts = new CancellationTokenSource();
		Console.CancelKeyPress += (_, e) =>
		{
			e.Cancel = true;
			cts.Cancel();
		};

		try
		{
			while (true)
			{
				try
				{
					var cr = c.Consume(cts.Token);

					Console.ForegroundColor = ConsoleColor.Green;
					Console.WriteLine("收取成功:" + cr.Value);
				}
				catch (ConsumeException e)
				{
					Console.ForegroundColor = ConsoleColor.Red;
					Console.WriteLine("收取失败:" + e.Error.Reason);
				}
			}
		}
		catch (OperationCanceledException e)
		{
			Console.ForegroundColor = ConsoleColor.Red;
			Console.WriteLine("收取失败:" + e.Message);

			c.Close();
		}
	}
}

说明:上述代码中的quber1账户就是前面文章中提到的具有“读”权限的账户

 

4、测试

        在之前介绍的配置文章中,我们配置了3个账号(quber[读和写]、quber1[读]、quber2[写]),为了方便测试,后续我们又增加了1个账号(quber3[读]),这样就相当于有3个账号具有消费信息的权限(quber、quber1和quber3),然后我们分别设置这3个具有读权限的账户去消费消息,并编译消费者项目,将编译好的文件分别复制到3个不同的文件夹中,然后双击打开文件夹中的Quber.Test.KafkaConsumer.exe文件,此时运行生产者客户端,发送几条测试的数据,具体演示效果如下图所示:



说明:

        上述代码中的SslCaLocation = @"D:\Net_Program\Net_Kafka\04_SSL\ca-cert"就是前面文章Kafka配置4--Windows下配置Kafka的SSL证书中提到的证书生成的地址。

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值