| MICROSERVICES: ZERO TO HERO! | MICROSSERVIÇOS: DO INÍCIO AO FIM! |
|---|---|
| MICROSERVICES: ZERO TO HERO! | MICROSSERVIÇOS: DO INÍCIO AO FIM! |
sequenceDiagram
participant Client
participant AuthService
participant CustomerService
participant ProductService
participant OrderService
participant PaymentService
participant Kafka
Client->>AuthService: POST /auth
AuthService-->>Client: JWT
Client->>CustomerService: POST /customers
CustomerService-->>Client: Customer Created
Client->>ProductService: POST /products
ProductService-->>Client: Product Created
Client->>OrderService: POST /orders
OrderService-->>Client: Order Created
OrderService->>Kafka: OrderEvent Published
Kafka-->>PaymentService: OrderEvent Consumed
Note right of PaymentService: Payment Created
Client->>PaymentService: PUT /payments/order/{orderId}/status/{status}
PaymentService-->>Client: Payment Status Updated
PaymentService->>Kafka: PaymentEvent Published
Kafka-->>OrderService: PaymentEvent Consumed
Note right of OrderService: Status Updated
- Screaming Architecture
- Clean Architecture
- Event-Driven Architecture
- Clean Code
- Domain-Driven Design
- SOLID Principles
- Separation of Concerns
- Common Closure Principle
- Common Reuse Principle
- Test Pyramid
- Ambassador Pattern
- Circuit Breaker Pattern
- Mediator Pattern
- Outbox Pattern
- Result Pattern
- Retry Pattern
- Strategy Pattern
- Java
- Spring Boot
- Kong
- Keycloak
- OAuth2
- JWT
- Kafka
- MongoDB
- Debezium
- Redis
- Elastic
- Swagger
- Testcontainers
- Docker
- Kubernetes
docker compose up --detach --build --remove-orphans
Install Into Local Maven Repository: mvn clean install
-
Kong:
http://localhost:8002 -
Keycloak:
http://localhost:8005Username:adminPassword:password -
Kafka:
http://localhost:9000 -
Mongo:
http://localhost:27018 -
Redis:
http://localhost:6380 -
Logs:
http://localhost:5601/app/management/data/index_management/data_streams -
APM:
http://localhost:5601/app/apm/services
Localhost: http://localhost:8010
Docker: http://localhost:9010
Kong: http://localhost:8000/authservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /auth | Get |
| POST | /auth | Auth |
| POST | /users | Save |
| DELETE | /users/{id} | Delete |
Localhost: http://localhost:8015
Docker: http://localhost:9015
Kong: http://localhost:8000/configurationservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /configurations | Get |
| POST | /configurations/broadcast | Broadcast |
| GET | /features | List |
| POST | /features | Create |
| GET | /features/{id} | Get |
| DELETE | /features/{id} | Delete |
| PUT | /features/{id}/disable | Disable |
| PUT | /features/{id}/enable | Enable |
| GET | /features/{id}/enabled | Enabled |
| GET | /features/groups/{group} | List By Group |
| GET | /properties | List |
| POST | /properties | Create |
| GET | /properties/{id} | Get |
| DELETE | /properties/{id} | Delete |
| PUT | /properties/{id}/value/{value} | Update Value |
Localhost: http://localhost:8020
Docker: http://localhost:9020
Kong: http://localhost:8000/customerservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /customers | List |
| POST | /customers | Create |
| GET | /customers/{id} | Get |
| PUT | /customers/{id} | Update |
| DELETE | /customers/{id} | Delete |
Localhost: http://localhost:8025
Docker: http://localhost:9025
Kong: http://localhost:8000/productservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /products | List |
| POST | /products | Create |
| GET | /products/{id} | Get |
| PUT | /products/{id} | Update |
| DELETE | /products/{id} | Delete |
Localhost: http://localhost:8030
Docker: http://localhost:9030
Kong: http://localhost:8000/orderservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /orders | List |
| POST | /orders | Create |
| GET | /orders/{id} | Get |
Localhost: http://localhost:8035
Docker: http://localhost:9035
Kong: http://localhost:8000/paymentservice
| Method | Endpoint | Description |
|---|---|---|
| GET | /payments | List |
| GET | /payments/{id} | Get |
| GET | /payments/order/{orderId} | Get By Order Id |
| PUT | /payments/order/{orderId}/status/{status} | Update Status |
@Service public class ProductService { @Cacheable(value = "products") public List<Product> get() { return repository.findAll(); } @Cacheable(value = "products", key = "#id") public Optional<Product> get(final UUID id) { return repository.findById(id); } @CachePut(value = "products", key = "#product.id") public Product save(final Product product) { return repository.save(product); } @CacheEvict(value = "products", key = "#id") public void delete(final UUID id) { repository.deleteById(id); } @CacheEvict(value = "products", allEntries = true) public void delete() { repository.deleteAll(); } }