Nats-Server , Usando channels
Nesse artigo vou mostrar uma forma simples de consumir uma fila do nats-server, usando channels.
Este artigo sera de grande importância quando formos falar sobre microservice utilizando Go, por ser uma linguagem de grande performance, vale a pena ter em seu arsenal de linguagens e se tratando de microservice nada como uma linguagem simples e poderosa.
Inicialmente vamos ver qual sera a estrutura usada em nosso mini projeto.
Vamos ter 2 projetos, um para receber as mensagens, e outro para enviar onde sera simulado uma aplicação.
Vamos inicialmente criar nosso projeto nats-server, onde sera nosso cliente.
Dentro dele vamos ter o main.go, e o service/service.go.
Vamos instalar nosso cliente do nats.
go get github.com/nats-io/nats.go
Agora vamos criar nosso service/service.go
Percebam que no exemplo usando o Marshal para deixar em json, apenas para visualizar melhor no terminal.
O pulo do gato, é nosso for, que ficara em um loop, infinito e sempre que chegar algo no tópico register, ele ira ler.
O que me deixa maravilhado com Go é que não precisa de framework ou instalar 300 dependências no projeto, e quando estiver tudo pronto é só fazer um build e ser feliz rs.
No código acima, temos a conexão.
Usando o default do nats, caso não use pode colocar a string.
Logo a baixo temos nossa struct que será parseada, quando vir alguma mensagem em nosso tópico.
Depois temos, o tópico que ficaremos ouvindo, e nosso for que irá fazer a mágica.
Nosso main sera bem simples.
Agora com nosso cliente, feito (simples d+, porem muito didático)
Vamos agora ao serviço, que ficara enviando as mensagens.
Para isso vamos criar outro projeto, para ficar bem organizado e funcionar legal.
Vamos criar nosso, service/sendmessage.go
notem que usamos a libe faker, para gerar alguns dados.
go get github.com/bxcodec/faker/v3
Nesse caso temos algumas coisas iguais o serviço anterior, a diferença é que esse, cara vai publicar e não ouvir, para isso temos esse for maroto, onde iremos gerar os dados, e publicar.
Notem que temos um sleep, para não ficar bombardeando nossa fila rs.
Para finalizar temos também um main.go maroto. Idêntico ao anterior.
E para podermos testar temos que ter um nats-server rodando, para isso usei o docker.