QuickProd simplifica la gestión y maximiza la eficiencia en la administración de productos en diversos contextos.
Checkout QP-v1 (Repo de aprendizaje para desarrollar la Version v2)
Permite combinar los elementos y recursos más utilizados, permitiendonos así tener una suite de microservicios diseñada para proporcionar funcionalidades escalables y distribuidas para la gestión de productos, categorías e inventarios.
Está estructurado como una arquitectura de microservicios utilizando Spring Boot, con servicios para manejar diferentes aspectos de dominio como productos, categorías y gestión de inventario.
La arquitectura está diseñada para ser escalable, segura y eficiente, con un servidor de configuración central, un servidor de descubrimiento para el registro de servicios y una puerta de enlace API que dirige a los diferentes servicios e implementa autentificacion con Keycloack.
Keycloack para autenticación, Zipkin capturador de trazas, propagación de autenticación con TokenRelay.
- Proposito: Permite onfiguración centralizada que utiliza Spring Cloud Config para gestionar todas las configuraciones de los microservicios.
- Tecnologías: Spring Cloud Config, Spring Boot.
- Proposito: Utiliza Eureka Server para el registro y la localización de servicios en nuestra infraestructura.
- Tecnologías: Spring Cloud Netflix Eureka.
- Proposito: Actúa como un punto de entrada unificado para los servicios.
- Tecnologías: Spring Cloud Gateway, OAuth2, Keycloack, LoadBalancer Spring Boot.
- Proposito: Maneja las operaciones relacionadas con productos, almacenando los datos en cache con Redis.
- Tecnologías: Spring Data JPA, Spring Starter Redis para almacenar en cache, Spring Cloud OpenFeign para comunicación entre servicios.
- Proposito: Encargado de las operaciones relacionadas con categorías de productos, Redis para caché, OpenFeign.
- Tecnologías: Spring Boot, Spring Data JPA, Spring Cloud OpenFeign para comunicación entre servicios.
- Proposito: Encargado de las operaciones relacionadas con categorías de productos, Redis para caché, OpenFeign.
- Tecnologías: Spring Boot, Spring Data JPA, Spring Cloud OpenFeign para comunicación entre servicios.
Utilizamos FeignClients para la inter comunicación de los servicios.
- Instalar Docker y Docker Compose para levantar instancias de Keycloack, Redis, ZIPKIN
- JDK 17
Para ejecutar el proyecto, sigue estos pasos:
-
Dentro del directorio 'docker', lanza el comando
docker-compose up --build -d
- Revisa el inicio correcto de cada container con el prefijo 'dekra-'
-
Ahora ejecuta los servicios en el siguiente orden:
mvn spring-boot:run
- Config Service
- Discovery Service
- Gateway Service
- (Product Service, Category Service, Inventory Service)
-
Conectate al frontend del Gateway en la siguiente URL:
http://localhost:8060/
Le redirigira automáticamente a la interfaz de Keycloack para autenticarse con el cliente de.- Usuario: dekra
- Contraseña: dekra Tras una autentificación satisfactoria, le redirigirá nuevamente a la ruta del GATEWAY, protegiendo así el resto de servicios.
-
Si lo necesitas, accede al panel de administrador de keycloack desde la siguiente Url:
http://localhost:8080/
Le redirigirle automáticamente a la interfaz admin de Keycloack.- Usuario: admin
- Contraseña: admin Tras una autentificación satisfactoria, le redirigirá nuevamente a la ruta del GATEWAY, protegiendo así el resto de servicios.
Lista de contenedores:
- dekra-keycloack (Manejo de inicio de sesión)
- dekra-redis (Almacenamiento en cache)
- dekra-zipkin (Evaluar las trazas)
Para acceder a un contenedor, utiliza el comando:
-
docker exec -it {nombre_del_contenedor} bash
-
Para salir usa,
exit
Roadmap:
- Crud de productos. (Localizado en product-service) ✅
- Todas las requests HTTP necesitan antes ser autenticadas con Keycloack. (Inclusive, el token debe ser emitido con el SCOPE_manager para acceder a los endpoints) ✅
- Los datos de product, category e inventory son almacenados en memoria H2, utilizando Redis como caché, con previsión de cambiar a una real en producción. ✅
- Aspecto en cada servicio del dominio para loggear el tiempo de cada método, avisando según ms el tipo de alerta (INFO, WARN, ERROR) ✅
Puntos de la prueba técnica restantes por realizar:
- Calculadora de impuestos por configuracion funcional, pero todavía no está integrado para aplicar a todos los precios de los productos. 🆗
- (Opcional) Desarrollar un endpoint para la obtención de los productos mediante una “query” dinámica, es decir, que se pueda filtrar por cualquier propiedad del producto de forma dinámica.
En proceso de documentar mis decisiones de arquitectura, problemas encontrados y soluciones aplicadas, junto con todas las referencias que utilicé para construir el proyecto. STAND BY