Skip to content

rafaelfgx/Microservices

Repository files navigation

Microservices

Build

Ebooks

System Design

Flow

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
Loading

Architecture, Design and Principles

Patterns

Technologies and Tools

Docker

docker compose up --detach --build --remove-orphans

Starter

Install Into Local Maven Repository: mvn clean install

Tools

  • Kong: http://localhost:8002

  • Keycloak: http://localhost:8005 Username: admin Password: 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

Services

AuthService

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

ConfigurationService

Localhost: http://localhost:8015

Docker: http://localhost:9015

Kong: http://localhost:8000/configurationservice

Method Endpoint Description
GET /configurations List
GET /configurations/{id} Get
POST /configurations Create
DELETE /configurations/{id} Delete
PATCH /configurations/{id}/value/{value} Update Value
POST /configurations/broadcast Broadcast

CustomerService

Localhost: http://localhost:8020

Docker: http://localhost:9020

Kong: http://localhost:8000/customerservice

Method Endpoint Description
GET /customers List
GET /customers/{id} Get
POST /customers Create
PUT /customers/{id} Update
DELETE /customers/{id} Delete

ProductService

Localhost: http://localhost:8025

Docker: http://localhost:9025

Kong: http://localhost:8000/productservice

Method Endpoint Description
GET /products List
GET /products/{id} Get
POST /products Create
PUT /products/{id} Update
DELETE /products/{id} Delete

OrderService

Localhost: http://localhost:8030

Docker: http://localhost:9030

Kong: http://localhost:8000/orderservice

Method Endpoint Description
GET /orders List
GET /orders/{id} Get
POST /orders Create

PaymentService

Localhost: http://localhost:8035

Docker: http://localhost:9035

Kong: http://localhost:8000/paymentservice

Meth od Endpoint Description
GET /payments List
GET /payments/{id} Get
GET /payments/order/{orderId} Get By Order Id
PATCH /payments/order/{orderId}/status/{status} Update Status

Examples

Cache

@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();
    }
}

Kafka

echo KEY:{"Key":"KEY"} | docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9094 --topic TOPIC --reader-property parse.key=true --reader-property key.separator=":"
docker exec -i kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9094 --topic TOPIC --from-beginning --formatter-property print.key=true --formatter-property key.separator=:

About

Screaming Architecture, Clean Architecture, Event-Driven Architecture, Clean Code, DDD, SOLID, Test Pyramid, Patterns (Ambassador, Circuit Breaker, Mediator, Outbox, Result, Retry, Strategy), Java 25, Spring Boot 4, Kong, Keycloak, Kafka, MongoDB, Redis, Elastic, Testcontainers, Docker

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages