如何使用asp.net将Kafka消息保存到文件中

2q5ifsrm  于 2021-06-06  发布在  Kafka
关注(0)|答案(3)|浏览(362)

嗨,我已经为kafka消费者创建了一个控制台应用程序来接收消息。

class Program
{
    static void Main(string[] args)
    {
        string topic = "IDGTestTopic";
        Uri uri = new Uri("http://localhost:9092");
        var options = new KafkaOptions(uri);
        var router = new BrokerRouter(options);
        var consumer = new Consumer(new ConsumerOptions(topic, router));
        foreach (var message in consumer.Consume())
        {
            Console.WriteLine(Encoding.UTF8.GetString(message.Value));
            //Saving messages in files
            string lines = Encoding.UTF8.GetString(message.Value);
            System.IO.File.WriteAllText(@"C:\Project\Kafka Research\Kafka_Consumer\Kafka_Consumer\KafkaMessages\Messages.txt", lines);
        }

    }
}

但它只存储当前消息。如果看到控制台,所有消息都会显示出来。

但如果看到文本文件,它只包含当前消息

如何将所有消息保存在一个文件中?

hfsqlsce

hfsqlsce1#

@giorgos myrianthous你之前的第二个选择在某些方面更好。附加到stringbuilder并在循环外只向文件写入一次,很可能比在每个循环中多次执行io要快得多。我的建议是:

StringBuilder linebuilder = new StringBuilder();  //this line outside the loop

foreach (var message in consumer.Consume()) {
    Console.WriteLine(Encoding.UTF8.GetString(message.Value));
    //Saving messages in files
    linebuilder.Append(Encoding.UTF8.GetString(message.Value)); //this line inside the loop
}

System.IO.File.AppendAllText(@"C:\Project\Kafka Research\Kafka_Consumer\Kafka_Consumer\KafkaMessages\Messages.txt", linebuilder.ToString(());
velaa5lx

velaa5lx2#

每次使用邮件时,都会覆盖整个文件:

System.IO.File.WriteAllText

您需要在消费循环之外执行此操作。

inb24sb2

inb24sb23#

对于每条消息, System.IO.File.WriteAllText 覆盖文件,因此创建的文件将只包含最新消息。
为了将所有消息保存在一个文件中,可以替换 System.IO.File.WriteAllTextSystem.IO.File.AppendAllText 如下图所示:

foreach (var message in consumer.Consume()) {
    Console.WriteLine(Encoding.UTF8.GetString(message.Value));
    //Saving messages in files
    string lines = Encoding.UTF8.GetString(message.Value);
    System.IO.File.AppendAllText(@"C:\Project\Kafka Research\Kafka_Consumer\Kafka_Consumer\KafkaMessages\Messages.txt", lines);
}

根据文件,
file.appendalltext方法(字符串, (字符串)
打开一个文件,将指定的字符串附加到该文件,然后关闭该文件。如果文件不存在,此方法将创建一个文件,将指定的字符串写入该文件,然后关闭该文件。
和file.writealltext方法(字符串, (字符串)
创建一个新文件,将指定的字符串写入该文件,然后关闭该文件。如果目标文件已经存在,它将被覆盖。

相关问题