using Confluent.Kafka;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace InfusionBagLabel.Kafka
{
public class KafkaProducer
{
public static KafkaProducer instance;
private static IProducer<string, object> producer;
public KafkaProducer()
{
IProducer<string, object> pd = null;
try
{
ProducerConfig config = new ProducerConfig();
config.EnableIdempotence = true;
config.Acks = Acks.All;
config.LingerMs = 250;
config.MessageSendMaxRetries = 3;
config.BootstrapServers = MyConfig.GetInstance().GetConfig("KafkaIP")+":"+ MyConfig.GetInstance().GetConfig("KafkaPort");// ConfigHelper.GetValue("KafkaIP");// "10.0.5.96:9092";
config.EnableIdempotence = true;
var builder = new ProducerBuilder<string, object>(config);
builder.SetValueSerializer(new KafkaConverter());//设置序列化方式
pd = builder.Build();
}
catch (Exception ex)
{
App.Log.Error($"KafkaProducer Send Error {ex.Message}");
}
producer = pd;
}
public static KafkaProducer GetInstance()
{
if (instance == null)
{
instance = new KafkaProducer();
}
return instance;
}
public void Send(string Topic, string Key, string Value)
{
try
{
producer.Produce(Topic, new Message<string, object>() { Key = Key, Value = Value });
}
catch (Exception ex)
{
App.Log.Error($"KafkaProducer Send Error {ex.Message}");
}
}
public async void SendAsync(string IDKey, string Topic, string Key, string Value)
{
App.Log.Info($"kafka消息生产 数据 {IDKey} {Topic} {Key} {Value}");
try
{
var dr = await producer.ProduceAsync(Topic, new Message<string, object>() { Key = Key, Value = Value });
App.Log.Info($"kafka消息生产 KafkaProducer '{dr.Key}' '{dr.Value}' to '{dr.TopicPartitionOffset}'");
}
catch (ProduceException<string, string> e)
{
App.Log.Error($"KafkaProducer : {e.Error.Reason}");
}
}
}
}
C#使用Confluent.kafka生产消息
最新推荐文章于 2025-01-10 01:03:59 发布