josebruno2020 / laravel-docker-kafka

Laravel with docker-compose to setup kafka in your project.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Total Downloads Latest Stable Version License

Sobre o projeto

Um pequeno e sucinto projeto desenvolvido em laravel para consumir tópicos no Apache Kafka.

Requerimentos

Para rodar este projeto você deve ter instalado o docker e docker-compose.

Instalação

Rode o comando para buildar a imagem do php e subir os serviços da aplicação.

OBS: O projeto laravel ficará disponivel na porta 8086 do seu localhsot. Certifique-se que sua porta esteja disponível. OBS2: Dentro do arquivo docker-compose.yml estão os argumentos de usuário e UID para configurar o composer.

docker-compose build && docker-compose up -d 

Agora dentro do container do laravel você precisa instalar as dependências e rodar as migrations de teste. Para isso entre no terminal do container:

docker exec -it laravel-test-app bash
cp .env.example .env && composer install && php artisan migrate && php artisan db:seed && exit

Estre projeto foi configurado para usar o banco de dados postgres. Após rodar as migrations e o seed, existe um endpoint simples que lista os clientes cadastrados para testar a conexão com o banco de dados.

http://localhost:8086/api/customers

Criação tópico no kafka

Agora precisamos criar o tópico que será consumido pela aplicação. Para isso entre no terminal do container do kafka e rode o comando:

docker exec -it laravel-test-kafka bash
kafka-topics --create --bootstrap-server localhost:29092 --partitions 3 --replication-factor 1 --topic topico-2 && exit

Note que coloquei 3 repartições para o tópico. Fique a vontade para mudar caso queira ou precise.

OBS: Caso precise mudar o nome do tópico, vai precisar mudar o nome no código igualmente.

Kafka send e kafka consumer

Para consumir essa mensagem foi criado um consumer que fica escutando o mesmo tópico. Para isso rode o comando (dentro do container do laravel):

docker exec -it laravel-test-app bash
php artisan kafka:consumer

Para mandar mensagens para o tópico foi criada uma rota GET no path /kafka-send. Será disparado uma mensgem automáticamente. Poderia ser um POST mandando no body a mensagem que precise, mas está assim apenas por exemplo.

http://localhost:8086/kafka-send

Esse processo irá printar no terminal o body da mensagem, apenas como exemplo.

Encerrar processos

Você pode facilmente parar os serviços do docker com o comando

docker-compose down && docker rmi laravel-test

About

Laravel with docker-compose to setup kafka in your project.


Languages

Language:PHP 82.8%Language:Blade 15.2%Language:Dockerfile 1.1%Language:Shell 0.9%