🟢 Como utilizar NATS no Spring Boot

Este guia mostra como criar um projeto de exemplo para publicar e consumir mensagens usando NATS como broker de mensagens, utilizando Spring Boot.

🛠️ Criação do Projeto

Crie um novo projeto Spring Boot com as dependências básicas:

  • 🌐 Spring Boot Starter Web
  • ✉️ NATS (biblioteca Java)
  • 🧪 Datafaker (para geração de dados de exemplo)

No build.gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'io.nats:jnats:2.19.0'
    implementation 'net.datafaker:datafaker:2.2.2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

🐳 Configuração do NATS

Adicione um arquivo docker-compose.yml para subir o NATS localmente:

version: '3.8'
services:
  nats:
    image: nats:2.10
    ports:
      - "4222:4222"

Inicie o NATS com:

docker compose up -d

⚙️ Configuração de Host e Porta

No seu código Java, configure o host e a porta do NATS (por padrão, localhost:4222):

String natsUrl = "nats://localhost:4222";
Connection natsConnection = Nats.connect(natsUrl);

📤 Publicando Mensagens

Exemplo de publicação de mensagem:

import io.nats.client.Connection;
import io.nats.client.Nats;

public void publishMessage(String subject, String message) throws Exception {
    try (Connection nc = Nats.connect("nats://localhost:4222")) {
        nc.publish(subject, message.getBytes(StandardCharsets.UTF_8));
    }
}

📥 Consumindo Mensagens

Exemplo de assinatura de mensagens:

import io.nats.client.Connection;
import io.nats.client.Dispatcher;
import io.nats.client.Nats;

public void subscribe(String subject) throws Exception {
    Connection nc = Nats.connect("nats://localhost:4222");
    Dispatcher d = nc.createDispatcher((msg) -> {
        System.out.println("Recebido: " + new String(msg.getData(), StandardCharsets.UTF_8));
    });
    d.subscribe(subject);
}

🧩 Integração com Spring Boot

Você pode criar um @Service para publicar e consumir mensagens, injetando as dependências conforme necessário.

🚀 Testando

Execute a aplicação Spring Boot:

./gradlew bootRun

Dispare requisições para publicar ou consumir mensagens conforme sua API REST.


🎯 Projeto Demo no GitHub

Confira um exemplo completo e funcional de integração Spring Boot + NATS no repositório:

👉 Projeto Demo no GitHub

Para mais detalhes, consulte a documentação oficial do NATS Java.