Certifique-se que as variáveis de ambiente utilizadas, especialmente aquelas que dizem respeito às portas, não irão conflitar com algum outro serviço da sua máquina.
os arquivos podem ser encontrados em:
services/*/.env
.
O comando abaixo irá subir todos os serviços docker necessários:
make up-all
Caso prefira subir o ambiente sem o Makefile acima:
docker network create internal-net
docker compose up -d --scale kafkaui=0 --scale db-test=0
Dessa forma, a rede docker que o projeto necessita será criada e o container do kafka-ui e do banco de teste serão ignorados, uma vez que estão presentes no projeto apenas para acompanhamento do fluxo de eventos e para a execução dos testes de integração.
Você pode importar a collection do Insomnia localizado neste repositório ou utilizar os comandos abaixo direto no terminal. Necessita de curl instalado!
curl --request POST \
--url https://localhost:8080/v1/accounts \
--header 'Content-Type: application/json' \
--data '{
"documentNumber": "12348378734"
}'
curl --request GET \
--url https://localhost:8080/v1/accounts/seu-uuid-aqui
curl --request POST \
--url https://localhost:8080/v1/transactions \
--header 'Content-Type: application/json' \
--data '{
"accountId": "seu-uuid-aqui",
"operationTypeId": 1,
"amount": -5.00
}'
make run-db-tests
make run-unit-tests
- Docker
- Golang (1.20)
- Kafka
- Postgres
- Krakend API-Gateway
- sqlc + pgx/v5
- gomock(uber)
Este design de arquitetura nos ajuda com a testabilidade e flexibilidade da nossa aplicação, possibilitando uma atenção maior ao seu domínio sem preocupações com o que está fora dele.
Arquitetura escolhida pela escabilidade, modularidade, elasticidade, tolerância a falhas, testabilidade e confiabilidade.
Uma Api-Gateway entrega muitas vantagens, neste pequeno projeto serve para direcionar as requests para o microservice adequado.
Como estamos lidando com real e centavos (ou quaisquer que sejam os equivalentes), e eles geralmente são representados por um número decimal, pode parecer óbvio usar float ou decimal, pois eles são projetados para representar números que incluem casas decimais. No entanto, se você entender um pouco sobre como float funciona no nível do hardware, verá por que essa não é a melhor abordagem.
Você pode rodar o exemplo aqui e também ler mais informações neste ótimo artigo.
Trabalhar com microservices pode ser muito complexo dependendo do domínio da aplicação. Um dos grandes problemas desta arquitetura são as chamadas síncronas entre serviços, que podem gerar lentidão no sistema como um todo ou folharem devido a problemas de rede. Event-Driven é descrito por Mark Richards e Neal Ford em Fundamentals of Software Architecture: An Engineering Approach como uma arquitetura
. Nesta arquitetura, cada ação gera um evento e este será usado por outra ação que também irá gerar um evento e assim por diante.
Devido a esta característica, microservices "casam" bem como uma arquitetura baseada em eventos, pois os erros de rede são drasticamente diminuídos e tudo acontece de forma assíncrona.