Trimite/produce json mesaj prin kafka

0

Problema

Aceasta este prima mea timp folosind Kafka și eu sunt de planificare pentru a utiliza kafka cu .net

Am vrut să știu dacă pot trimite JSON ca un mesaj când am producerea unui eveniment

Eu sunt următorul tutorial: https://developer.confluent.io/get-started/dotnet/#build-producer

De asemenea, există o modalitate pentru ca valoarea să fie mapate la un model, astfel încât valoarea/json structura este întotdeauna legat de acest model

Așa de exemplu: dacă vreau să-mi json valoare să fie

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

Cele mai multe dintre exemplele pe care le puteți găsi sunt de genul asta:

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}");
        }
    }
}

Mi-ar place articolul pentru a fi o clasă în json structura.

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

Cel mai bun răspuns

0

a vrut să știe dacă pot trimite JSON ca un mesaj când am producerea unui eveniment

Da. Kafka magazine bytes și convertește bytes folosind Serializers. Atunci când construirea unui Producător, aveți opțiunea de asteptare SetValueSerializer.

Unele dintre built-in serializers pot fi găsite la https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Serializers.cs

Ai nevoie pentru a scrie propriul dvs. de la generic se ocupe de orice JSON tipuri de modele.

Atunci când se utilizează Utf8Serializer pentru siruri de caractere, va trebui să pre-serialize obiect din modelul de clasă, apoi trimite ca valoare. În exemplul tău, te-aș înlocui var item cu un obiect serializat.

Cum pot transforma un C# obiect într-un șir JSON în .NET?

Atunci când se utilizează modelul de clase, datele dvs. vor fi, de obicei, puternic tastat până când veți începe manual scris JSON sau de a folosi Dicționarul tipuri. Dacă ai vrut externe mesaj de validare, Confluente Schema de Registry este un exemplu care susține JSONSchema și JsonSerializer din confluent-dotnet-kafka proiectul susține acest lucru.

2021-11-23 22:27:28

Doar un follow-up întrebare. Știi, dacă mă pot limita la dimensiunea mesajului și există o modalitate pentru producator de a verifica ceea ce este dimensiunea de eveniment înainte de a trimite și de a nu permite pentru a trimite mesajul, dacă dimensiunea este mai mult decât limita?
Learn AspNet

Kafka are o limită implicită de 1MB mesaj de loturi. Dacă ai dimensiunea de serializat matrice octet, care ar trebui să fie o aproximație de o înregistrare individuală dimensiune (e aeriene suplimentare cum ar fi de înregistrare anteturi și marcajele de timp, deși)
OneCricketeer

Multumesc. Poți, te rog, răspunde: stackoverflow.com/questions/70097676/...
Learn AspNet

În alte limbi

Această pagină este în alte limbi

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