通过传入消息在.NET中创建Kafka生成器

时间:2018-04-11 07:13:07

标签: .net apache-kafka producer

我想知道R& D中的任何人是否有使用.NET的Kafka的任何经验。下面的代码片段来自客户端,它是用Java编写的。似乎Java的Kafka库比.NET的库更丰富。我试图做的是在客户端站点的远程服务器上启动Kafka生产者,以便通过Kafka生产者提供RTA状态。

我需要做的是在.NET中重新创建以下代码,尤其是最后一行' openInterfacesSubscriber.send()'。我正在使用Confluent的.NET软件包。任何帮助将不胜感激。

code

1 个答案:

答案 0 :(得分:1)

欢迎使用Stack Overflow!

.NET API仍在进行中,在Windows上托管也有点棘手(或者我发现)。

我一直在使用实验性的.net Kafka客户端,发现很容易#34; map"到你发布的java源码:

  • 配置图只是一个字典
  • 序列化/反序列化设置可以通过Producer构造函数的参数在代码中完成。您可能需要更改编码。
  • KafkaTemplate<>.send映射到Producer.ProduceAsync

请注意,客户端仍在不断发展,这是您的代码版本,适用于我的注释nuget版本:

static void Main(string[] args)
{          
    // Client: .net core console app 2.0 / Confluent.Kafka nuget 1.0.0-experimental-2
    // Server: Kafka 1.0.0
    Dictionary<string, object> config = new Dictionary<string, object>()
    {
        { "bootstrap.servers", "ept-oi-log" },
        { "group.id", "ept-oi-log" },
        { "enable.auto.commit", true },
        { "session.timeout.ms", 15000 },
        { "client.id", "1" },
    };

    Producer(config).Wait();
}

static async Task Producer(IEnumerable<KeyValuePair<string, object>> kafkaConfig)
{
    var kafkaTopic = "realtimesubscriptionrequest";
    using (var producer = new Producer<int, string>(kafkaConfig, new IntSerializer(), new StringSerializer(System.Text.Encoding.UTF8)))
    {
        int i = 0;
        foreach (var measureName in new[] { "AGENTBYACCOUNTMEASURES", "AGENTBYROUTINGSERVICEMEASURES" })
        {
            String subRequest = String.Format(@"   {{""userName"":""{0}"",""password"":""{1}"",""subscriptionRequestId"":""5d09vjfgk"",""request"":""SUBSCRIBE"", ""measuresStream"":""{2}"",""version"":""3.4""}}", 
                "ggghhhh@xxx.lab", "xxxxxxx", measureName);
            await producer.ProduceAsync(kafkaTopic, new Message<int, string>() { Key = i++, Value = subRequest });
        }
    }
}