Bota de primavera | Cómo publicar mensajes JSON en Apache Kafka

Apache Kafka es un sistema de mensajería de publicación y suscripción. Una cola de mensajería le permite enviar mensajes entre procesos, aplicaciones y servidores. En este artículo, veremos cómo enviar mensajes JSON a Apache Kafka en una aplicación Spring Boot.

Para aprender a crear un proyecto Spring Boot, consulte este artículo .

La forma completa de JSON es la notación de objetos de JavaScript. JSON es un formato de datos liviano para el intercambio de datos que los humanos pueden leer y escribir fácilmente, y las máquinas pueden analizar y generar fácilmente. Aunque se deriva de un subconjunto de JavaScript, es independiente del lenguaje. Es un formato de texto completo e independiente del idioma. Se pueden seguir los siguientes pasos para publicar mensajes JSON en Apache Kafka:

  1. Vaya a spring initializr y cree un proyecto inicial con las siguientes dependencias:
    • Telaraña de primavera
    • Primavera para Apache Kafka
  2. Abra el proyecto en un IDE y sincronice las dependencias. En este artículo, estaríamos creando un modelo de estudiante donde estaríamos publicando los detalles del estudiante. Por lo tanto, cree una clase modelo Student . Agregue miembros de datos y cree un constructor y cree captadores y definidores. La siguiente es la implementación de la clase de estudiante:

    // Java program to implement a
    // student class
      
    // Creating a student class
    public class Student {
      
        // Data members of the
        // student class
        int id;
        String firstName;
        String lastName;
      
        // Constructor of the student
        // class
        public Student(int id, String firstName,
                       String lastName)
        {
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
        }
      
        // Implementing the getters
        // and setters
        public int getId()
        {
            return id;
        }
      
        public void setId(int id)
        {
            this.id = id;
        }
      
        public String getFirstName()
        {
            return firstName;
        }
      
        public void setFirstName(String firstName)
        {
            this.firstName = firstName;
        }
      
        public String getLastName()
        {
            return lastName;
        }
      
        public void setLastName(String lastName)
        {
            this.lastName = lastName;
        }
    }
  3. Ahora, crea un nuevo controlador de clase con la anotación @RestController . Cree una API GET e inicialice KafkaTemplate con el parámetro como string y objeto de clase modelo. La siguiente es la implementación del controlador:

    // Java program to implement a
    // controller
      
    @RestController
    @RequestMapping("gfg")
    public class UserResource {
      
        @Autowired
        private KafkaTemplate<String, Student>
            kafkaTemplate;
      
        private static final String TOPIC
            = "StudentExample";
      
        @GetMapping("/publish/{id}/"
                    + "{firstName}/{lastName}")
      
        public String post(
            @PathVariable("id") final int id,
            @PathVariable("firstName") final
                String firstName,
            @PathVariable("lastName") final
                String lastName)
        {
      
            kafkaTemplate.send(
                TOPIC,
                new Student(
                    id, firstName,
                    lastName));
      
            return "Published successfully";
        }
    }
  4. Cree una clase StudentConfig con la anotación @Configuration . En esta clase serializaremos el objeto de la clase modelo.

    // Java program to serialize the
    // object of the model class
      
    @Configuration
    public class StudentConfig {
      
        @Bean
        public ProducerFactory<String, Student>
        producerFactory()
        {
            // Create a map of a string
            // and object
            Map<String, Object> config
                = new HashMap<>();
      
            config.put(
                ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
                "127.0.0.1:9092");
      
            config.put(
                ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class);
      
            config.put(
                ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                JsonSerializer.class);
      
            return new DefaultKafkaProducerFactory<>(config);
        }
      
        @Bean
        public KafkaTemplate<String, Student>
        kafkaTemplate()
        {
            return new KafkaTemplate<>(
                producerFactory());
        }
    }
  5. Ahora, inicie zookeeper y el servidor Kafka. Necesitamos crear un nuevo tema con el nombre StudentExample . Para hacerlo, abra una nueva ventana del símbolo del sistema y cambie el directorio a la carpeta Kafka.
  6. Ahora, cree un nuevo tema usando el comando que se indica a continuación:

    Para Mac y Linux: bin/kafka-topics.sh –create –zookeeper localhost:2181 –factor de replicación 1 –particiones 1 –tema nombre_tema

    Para Windows: .\bin\windows\kafka-topics.bat –create –zookeeper localhost:2181 –factor de replicación 1 –particiones 1 –tema nombre_tema

  7. Ahora, para ver los mensajes en el servidor Kafka en tiempo real, use el siguiente comando:

    Para Mac y Linux: bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic topic_name –from-beginning

    Para Windows: .\bin\windows\kafka-console-consumer.bat –bootstrap-server localhost:9092 –tema nombre_tema –desde-el-principio

  8. Ejecute la aplicación y llame a la API como:

    localhost:8080/gfg/publish/{id}/{nombre}/{apellido}

    Nota: si se ha utilizado un puerto diferente, reemplace el puerto con 8080.

Producción:

  • Llamando a la API:
  • Comprobación del mensaje en tiempo real:

Publicación traducida automáticamente

Artículo escrito por AakashYadav4 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *