Contém 5 componentes, todos eles são aplicativos implantáveis independentemente.
Este serviço mantém o registro de todos os microservices que foram implantados.
Foi feito uso do netflix eureka neste projeto.
Pensando na questão do client realizar suas chamadas, diretamente para um único ponto de entrada
que encaminharia a solicitação para o serviço de back-end apropriado.
Com base nessa questão, usei o netflix zuul, o configurando para rotear as solicitações especificando rotas.
Para acessar qualquer recurso de autenticação é necessário,
em vez de usar as credenciais do proprietário do recurso para acessar recursos protegidos,
o cliente obtém um token de acesso.
Com base no que o CQRS propõe, para que separemos a aplicação em modelos diferentes para atualização e exibição,
que de acordo com o padrão do CQRS estariamos falando dos Comandos e Consultas.
No momento que o usuário realiza um compra com cartão, isso é roteado para o modelo de comando
que por sua vez, irá realizar operações necessárias e informará ao modelo de consulta
para que as novas informações sejam exibidas para o usuário.
Ainda com o uso do Axon Framework foi possivel a implementação do padrão arquitetural CQRS.
Para comunicação de nossas aplicações. ocorrerá através de barramento de eventos fazendo uso do RabbitMq.
Para a persistência dos gastos com cartões, será feito uso do Mysql.
E para indexação das categotorias, será feito uso do SOLR.
- Maven 3
- Java 8
- Git
- Docker/Docker Compose
- Mysql
- Solr
- RabbitMq
- Service Registry
- Auth Service
- Service Gateway
- Expense Management Command
- Expense Management Query
Em cada serviço (registry, auth, gateway, command e query)
- mvn clean compile package -DskipTests
- docker-compose up --no-start
Ao termino desse processo, executar os seguintes comandos:
- docker start mysql solr rabbit
- docker start eureka oauth
- docker start command query
- docker start zuul
*Obs. Devemos considerar um intervalo entre entre os start's dos serviços.
para isso faremos o seguinte request:
POST http://localhost:8765/auth-api/oauth/token?grant_type=password&username=demo&password=password
Authorization: Basic dHJ1c3RlZC1hcHA6cGFzc3dvcmQ=
Content-Type: application/json
com o token em 'mãos',vamos realizar um cadastro de gastos com cartão.
POST http://localhost:8765/commands/api-command
{
"userCode": 12345,
"description": "RecargaCel",
"date": "2019-03-01T01:45:55.031",
"value": 15.00
}
PUT http://localhost:8765/commands/api-command/{id}/categories
{"category": "Serviços"}
GET http://localhost:8765/queries/api-queries/12345/expense-menagement
GET http://localhost:8765/queries/api-queries/expense-menagement?userCode=12345&date=2019-03-01T00:00:00
GET http://localhost:8765/queries/api-queries/{Texto_a_Pesquisar}/categories