Lädt...

🔧 Produzindo e ouvindo eventos com Spring Boot


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Olá, nesse artigo irei mostrar uma pequena parte do mundo de arquitetura orientada a eventos, resumidamente utilizando Apache Kafka e Spring Boot.

Instalação do Apache Kafka

Para começar nosso projeto precisamos de um servidor Kafka rodando em nossa máquina, para isso iremos utilizar o Docker.

1. Baixar imagem do Apache Kafka

docker pull apache/kafka:3.9.0

2. Iniciar um container com a imagem

docker run -p 9092:9092 apache/kafka:3.9.0

Após isso você terá um container rodando na porta 9092

Começar nosso projeto

Para isso iremos criar o projeto no https://start.spring.io/.
Vamos instalar as dependências do Spring Web e Spring for Apache Kafka.

Recomendo utilizar o Offset Explorer para ver os tópicos e partições

Configurar produtor e consumidor em nosso Projeto

Aqui está o pulo do gato, o Spring fornece uma integração simplificada com o Apache Kafka, sem necessidade de realizar diversas configurações, claro que dependendo do cenário que você está será necessário ter algo mais personalizado.
O código abaixo será responsável por criar um tópico e as partições do mesmo:

import org.apache.kafka.clients.admin.NewTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.TopicBuilder;

@Configuration
@EnableKafka
public class KafkaConfig {

    @Bean
    public NewTopic newTopic() {
        return TopicBuilder.name("topico")
                .partitions(1)
                .build();
    }

}

Criamos apenas um tópico com o nome "topico" e que tem apenas uma partições, caso queira criar vários tópicos será necessário criar um bean pra cada tópico.
Após isso já temos nosso tópico rodando e pronto para enviar eventos nele, agora no código abaixo iremos produzir e ouvir os eventos:

package br.com.kafka.kafka.controllers;

import br.com.kafka.kafka.models.Mensagem;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/mensagem")
public class MensagemController {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @PostMapping
    public void send(@RequestBody Mensagem mensagem) {
        kafkaTemplate.send("topico", mensagem.toString());
    }

    @KafkaListener(groupId = "group-1", topics = "topico")
    public void listener(ConsumerRecord<String, String > event) throws Exception {
        System.out.println(event.value());
    }


}

Com isso já podemos brincar com algo, realizar integrações entre sistemas, lembrando que para manter um broker de eventos é bem custoso, mas em compensação seu sistema terá uma disponibilidade maior e caso ter algum erro o seu usuário final não ficará sabendo.
Basicamente é isso pretendo explorar afundo em outros artigos, como criar configurações personalizadas, adicionar serialização e deserialização de JSON para facilitar o escuta de eventos.

...

🔧 Produzindo e ouvindo eventos com Spring Boot


📈 113.09 Punkte
🔧 Programmierung

🔧 Os eventos (de tech) morreram? Vida longa aos eventos


📈 42.56 Punkte
🔧 Programmierung

🔧 Demystifying Spring: A Beginner's Journey into Spring Framework and Spring Boot


📈 31.01 Punkte
🔧 Programmierung

🔧 Spring vs Spring MVC vs Spring Boot: A Detailed Comparison for Java Developers


📈 31.01 Punkte
🔧 Programmierung

📰 software-architektur.tv: GraalVM mit Spring Native, Spring Boot und Spring Cloud


📈 31.01 Punkte
📰 IT Nachrichten

🔧 How to Use Spring Boot Eureka Server in Spring Boot 3.3.0+


📈 30.22 Punkte
🔧 Programmierung

🔧 📢 Implementando Eventos com Spring: Um Exemplo Prático 🚀


📈 29.23 Punkte
🔧 Programmierung

🔧 Implementing Token-Based Authentication in Spring Boot Using Spring Security, JWT, and JDBC Template


📈 23.06 Punkte
🔧 Programmierung

🔧 ResponseEntity in Spring Boot | HttpStatus | REST API | Java Spring


📈 23.06 Punkte
🔧 Programmierung

🔧 Java Spring vs Spring Boot - Understanding the Difference


📈 23.06 Punkte
🔧 Programmierung

🔧 Spring Boot with VueJS with Spring Security


📈 23.06 Punkte
🔧 Programmierung

🔧 ResponseEntity in Spring Boot | HttpStatus | REST API | Java Spring


📈 23.06 Punkte
🔧 Programmierung

🔧 Generative AI With Spring Boot and Spring AI


📈 23.06 Punkte
🔧 Programmierung

🔧 Developing Microservices with Spring Boot and Spring Cloud


📈 23.06 Punkte
🔧 Programmierung

🔧 Introduction to the Spring Framework: What It Is, Difference from Spring Boot, and Its Main Modules


📈 23.06 Punkte
🔧 Programmierung

🔧 Learn Spring Boot and Spring Data JPA


📈 23.06 Punkte
🔧 Programmierung

🔧 Master REST API Development and Streamline Data Access with Spring Boot and Spring Data JPA


📈 23.06 Punkte
🔧 Programmierung

🔧 spring-017: spring-boot-property-loading-overview


📈 23.06 Punkte
🔧 Programmierung

🎥 Spring Boot & Spring Data JPA – Complete Course


📈 23.06 Punkte
🎥 Video | Youtube

🔧 Master Spring Boot and Spring Security: Build a Shopping Cart Backend


📈 23.06 Punkte
🔧 Programmierung

🔧 spring-015: spring-boot-property-loading–logical-overview


📈 23.06 Punkte
🔧 Programmierung

🔧 How to Secure Your Spring Boot API with Spring Security in 5 Easy Steps


📈 23.06 Punkte
🔧 Programmierung

🔧 Build a Shopping Cart Backend with Spring Boot and Spring Security


📈 23.06 Punkte
🔧 Programmierung

🔧 spring-014: mvn spring-boot:run-lifecycle-phases


📈 23.06 Punkte
🔧 Programmierung

🔧 Upgrade Guide To Spring Boot 3.0 for Spring Data JPA and Querydsl


📈 23.06 Punkte
🔧 Programmierung

🔧 🧠 Getting Started with Spring AI: Add LLM Power to Your Spring Boot Apps


📈 23.06 Punkte
🔧 Programmierung

🎥 Spring Boot, Spring Security, JWT Course – Shopping Cart Backend Java Project


📈 23.06 Punkte
🎥 Video | Youtube

🔧 Build CRUD RESTful API Using Spring Boot 3, Spring Data JPA, Hibernate, and MySQL Database


📈 23.06 Punkte
🔧 Programmierung

🔧 Spring Boot Gateway With Spring Cloud and WebFlux


📈 23.06 Punkte
🔧 Programmierung

🔧 Spring Security 102: From Setup to Secure Endpoints in Spring Boot


📈 23.06 Punkte
🔧 Programmierung

🔧 spring-010: spring-boot-bootstrapping-behind-the-scenes


📈 23.06 Punkte
🔧 Programmierung

matomo