Utilizando Kafka em suas aplicações AspNet Core
Tags: dotnet, jundevelopers, kakfa, docker
Published: 2019-09-24 17:28:04

Olá pessoal, tudo bem com vocês?!

Depois de quase um ano sem escrever, por vários motivos profissionais e pessoais, estou aqui escrevendo novamente. Depois também de várias pessoas me cobrarem por retornar a escrever.

Mas vamos lá, talvez seja um assunto que alguns de vocês podem já conhecer, e já usam, mas mesmo assim resolvi escrever sobre esse tema, e fazer um exemplo da utilização do Apache Kafka com AspNet Core.

Primeiramente, preciso explicar para aqueles que ainda não conhecem o Apache Kafka, para que ele serve.

O Apache Kafka, foi desenvolvido na linguagem Scala e Java, e para quem já usa o RabbitMQ para processamento de filas e troca de mensagens, o conceito é o mesmo, mas com algumas diferenças, principalmente performance, e diferente conteúdo de mensagem, como por exemplo streaming, sim isso mesmo que você leu, streaming..

O Apache Kafka, é muito mais performático que o RabbitMQ, ele lida com alta taxa de transferência, bilhões de mensagens. No seu design, foi dada uma atenção especial para o manuseio eficiente de vários consumidores do mesmo fluxo que leem em velocidades diferentes (streamimg)

Vamos fazer um exemplo, de como usar o Apache Kafka.

Primeiramente, vamos fazer a instalação do serviço do Apache Kafka em algum servidor, irei instalar o serviço no Docker. Procurei uma imagem oficial, mas não encontrei, existem algumas por ai, mas irei usar essa que deu certo wurstmeister/kafka

Segue o compose a ser executado em seu servidor com Docker.
{% gist https://gist.github.com/marraia/7d7b3100b9e210dfced4deece4531b5e  %}

Depois de executar o compose, pode perceber que você terá dois serviços rodando, o Apache Kafka e o Apache ZooKeeper.

Dai agora você se pergunta: Fernando, o que é esse tal de Apache ZooKeeper?
O Apache Kafka, usa o Apache ZooKeeper, para manter e coordenar os brokers. Ele é responsável por controlar o status dos nós do cluster e permite que vários clientes executem leituras e gravações simultâneas.

Com o Apache Kafka funcionando em seu Docker junto com o Apache ZooKeeper, vamos criar uma API(Producer) e um Hosted Service (Consumer) em Asp Net Core.

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/0o5tmufkfdw29ikw0tri.png)
Estrutura da solução

Nos dois projetos, vamos adicionar referência:
*PM> Install-Package Confluent.Kafka -Version 1.1.0*

Essa referência, irá fazer nos comunicar com o serviço do Apache Kafka.
No projeto Kafka.Producer.API, vamos criar uma nova controller de nome Producer, e adicionar esse código:
{% gist https://gist.github.com/marraia/f6db082e39e03f61c0371da636e2afb4 %}


Veja que na linha 29, colocamos o nome da “fila”, de “fila_pedido”. Isso foi configurado na criação do container. No Apache Kafka, nos chamamos de Tópico. 
Quer dizer, para qual canal iremos mandar a mensagem,e por qual canal iremos obter a mensagem.

Neste caso, fizemos quem irá mandar a mensagem. Agora, a seguir vamos codificar, quem irá receber a mensagem.

No projeto Kafka.Consumer.Handler, vamos criar uma classe de nome MessageHandler.cs, para ser o consumidor da mensagem.

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/9wivpsfs9giobxmoxs5p.png)

Iremos adicionar esse código nessa classe.

{% gist https://gist.github.com/marraia/8ec509ad4d3d8893eab5a0302659dcfe %}

Veja que na linha 20, eu adiciono de qual canal iremos ler as mensagens enviadas.
Caso tenha a mensagem, iremos adicionar no Log a mensagem recebida.
Vamos rodar a aplicação, e ir nesse endereço: http://localhost:55080/swagger/index.html

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/grt7teatw221ouv38e0s.png)

<strong>Swagger</strong>
Já adicionei o Swagger na aplicação, e vou colocar uma mensagem a ser enviada.
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/fggn72km3lx7yg9i4poz.png)


Quando a mensagem é enviada, o consumer recebe a mensagem:
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/usr5suj02yio9ogsn8r8.png)

Mensagem de Log
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/ldy4waclr0uqcmnn8pmv.png)

Bom gente, está um exemplo simples de como usar o Apache Kafka em suas 
aplicações, microserviços em Asp Net Core utilizando Docker para hospedar o serviço do Apache Kafka.

Para suas aplicações que terá um grande volume de mensagens, e precisa de muita performance, ai está o Apache Kafka.

Espero terem gostado, segue o fonte em meu <strong>Github</strong>
[Marraia-Kafka](https://github.com/marraia/Kafka)


Um grande abraço e até a próxima!