Enviar/producir json mensaje a través de kafka

0

Pregunta

Esta es mi primera vez usando Kafka y estoy planeando el uso de kafka con .net

Quería saber si me pueden enviar JSON como un mensaje cuando me la producción de un evento

Estoy siguiendo el tutorial: https://developer.confluent.io/get-started/dotnet/#build-producer

También, hay una manera para que el valor que debe asignarse a un modelo, por lo que el valor de/json estructura está siempre ligado a ese modelo

Así, por ejemplo: si yo quiero que mi json valor

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

La mayoría de los ejemplos que puedo encontrar son como este:

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

Me gustaría que el elemento a una clase en la estructura json.

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

Mejor respuesta

0

quería saber si me pueden enviar JSON como un mensaje cuando me la producción de un evento

Sí. Kafka tiendas de bytes, y convierte los bytes mediante Serializadores. Cuando la construcción de un Productor, usted tiene la opción de llamar SetValueSerializer.

Algunos de los serializadores se puede encontrar en - https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Serializers.cs

Tendría que escribir su propia forma genérica manejar cualquier JSON tipos de modelo.

Cuando se utiliza el Utf8Serializer para las cadenas, deberá pre-serializar el objeto de su clase del modelo, a continuación, enviar el valor. En su ejemplo, reemplazar var item con algunos objetos serializados.

¿Cómo puedo convertir de C# objeto en una cadena JSON en .NETA?

Cuando se utiliza el modelo de clases, los datos suelen ser inflexible hasta que empiece a escribir manualmente el JSON o utilizar el Diccionario de tipos. Si usted quería externos mensaje de validación, el Confluente Esquema de Registro es un ejemplo que apoya JSONSchema y la JsonSerializer de confluent-dotnet-kafka proyecto de apoyo a la misma.

2021-11-23 22:27:28

Sólo una pregunta de seguimiento. ¿Sabes si puedo limitar el tamaño del mensaje y hay una manera para que el productor comprobar cuál es el tamaño del evento antes de enviar y no permiten enviar el mensaje si el tamaño es mayor que el límite?
Learn AspNet

Kafka tiene un límite predeterminado de 1 MB mensaje de lotes. Si usted consigue el tamaño de la serializado matriz de bytes, que debe ser una aproximación de un registro individual de tamaño (hay una sobrecarga adicional, tales como encabezados de registro y sellos de tiempo, a pesar de que)
OneCricketeer

Gracias. Puede usted por favor respuesta: stackoverflow.com/questions/70097676/...
Learn AspNet

En otros idiomas

Esta página está en otros idiomas

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