Odeslat/vyrábět json zprávy prostřednictvím kafka

0

Otázka

Tohle je moje první čas pomocí Kafka a mám v plánu použít kafka s .net

Chtěl jsem vědět, jestli můžu poslat JSON jako zprávu, když jsem se vyrábějí událost

Mám následující návod: https://developer.confluent.io/get-started/dotnet/#build-producer

Také, existuje způsob, jak že hodnoty musí být mapovány na model tak, že hodnota/json struktura je vždy vázána na tento model

Tak například: pokud chci, aby moje json hodnotu

{
  "customerName":"anything",
  "eventType":"one-of-three-enums",
  "columnsChanged": "string value or something"
}

Většinu příkladů, které jsem našel takhle:

using Confluent.Kafka;
using System;
using Microsoft.Extensions.Configuration;

class Producer {
    static void Main(string[] args)
    {
        if (args.Length != 1) {
            Console.WriteLine("Please provide the configuration file path as a command line argument");
        }

        IConfiguration configuration = new ConfigurationBuilder()
            .AddIniFile(args[0])
            .Build();

        const string topic = "purchases";

        string[] users = { "eabara", "jsmith", "sgarcia", "jbernard", "htanaka", "awalther" };
        string[] items = { "book", "alarm clock", "t-shirts", "gift card", "batteries" };

        using (var producer = new ProducerBuilder<string, string>(
            configuration.AsEnumerable()).Build())
        {
            var numProduced = 0;
            const int numMessages = 10;
            for (int i = 0; i < numMessages; ++i)
            {
                Random rnd = new Random();
                var user = users[rnd.Next(users.Length)];
                var item = items[rnd.Next(items.Length)];

                producer.Produce(topic, new Message<string, string> { Key = user, Value = item },
                    (deliveryReport) =>
                    {
                        if (deliveryReport.Error.Code != ErrorCode.NoError) {
                            Console.WriteLine($"Failed to deliver message: {deliveryReport.Error.Reason}");
                        }
                        else {
                            Console.WriteLine($"Produced event to topic {topic}: key = {user,-10} value = {item}");
                            numProduced += 1;
                        }
                    });
            }

            producer.Flush(TimeSpan.FromSeconds(10));
            Console.WriteLine($"{numProduced} messages were produced to topic {topic}");
        }
    }
}

Rád bych na položku třída v json struktury.

.net apache-kafka asp.net-core
2021-11-23 21:53:21
1

Nejlepší odpověď

0

chtěl vědět, jestli můžu poslat JSON jako zprávu, když jsem se vyrábějí událost

Ano. Kafka obchody, byty a převádí bajtů pomocí Serializers. Při budování Výrobce, máte možnost volat SetValueSerializer.

Některé vestavěné v serializers lze nalézt na - https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Serializers.cs

Budeš muset napsat svůj vlastní obecně zvládnout jakýkoli JSON typů modelů.

Při použití Utf8Serializer pro smyčce, budete muset pre-serializovat objekt z vašeho modelu třídy, pak poslat jako hodnotu. Ve vašem příkladu bych nahradit var item s některými serializovaný objekt.

Jak se mám obrátit, C#, objekt do formátu JSON řetězec .NET?

Při použití modelu tříd, vaše data budou obvykle být silně-napsaný, až začnete ruční psaní JSON nebo použít Slovník typů. Pokud bys chtěl externí ověřovací zprávě, Splývající Schématu Registru je jeden příklad, který podporuje JSONSchema a JsonSerializer z confluent-dotnet-kafka projekt podporuje.

2021-11-23 22:27:28

Jen další otázka. Nevíte, jestli můžu omezit velikost zprávy a existuje způsob, jak pro výrobce, aby zkontrolovat, co je velikost událost před odesláním, a neumožňují, aby odeslat zprávu, je-li velikost je větší než limit?
Learn AspNet

Kafka má výchozí limit 1MB zprávu dávkách. Pokud se dostanete na velikost serializované pole bajtů, které by měly být blízko sbližování právních individuální velikost záznamu (tam je další režijní náklady, jako je záznam záhlaví a časových razítek, i když)
OneCricketeer

Děkuji. Můžete mi prosím odpovědět: stackoverflow.com/questions/70097676/...
Learn AspNet

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................