Desplegando ms-licenses: Orquestando el Flujo de Compra
Hemos desplegado varios microservicios de soporte y de dominio, pero ahora llegamos a uno que se encuentra en el corazón del flujo de negocio: ms-licenses
. Este componente tiene una doble responsabilidad crítica:
- Gestionar las Licencias: Define los diferentes planes o niveles de servicio que se pueden ofrecer en la plataforma.
- Orquestar las Órdenes de Compra: Actúa como el punto de entrada cuando un usuario decide adquirir una licencia, coordinando a múltiples otros microservicios para completar la transacción.
Un Vistazo a la Arquitectura de ms-licenses
Section titled “Un Vistazo a la Arquitectura de ms-licenses”Flujo de la API a los Casos de Uso (CQRS)
Section titled “Flujo de la API a los Casos de Uso (CQRS)”- API: La API REST se divide en dos contextos principales:
License
para la gestión administrativa de las licencias, yOrder
para que los usuarios inicien y consulten sus procesos de compra. - Casos de Uso: Los
Commands
comoPayOrder
son los más complejos, ya que inician el flujo de orquestación.
El Modelo de Dominio: El Nexo del Negocio
Section titled “El Modelo de Dominio: El Nexo del Negocio”El modelo de dominio de ms-licenses
es un ejemplo perfecto de cómo un microservicio puede conectar múltiples contextos de negocio.
LicenseAggregate
: Modela una licencia con sus planes, precios y módulos asociados.OrderAggregate
: Es el Agregado central que representa una orden de compra. Fíjate cómo contiene información que proviene de otros dominios:Tenant
,Buyer
(que es un usuario),PaymentMethod
, etc. Esto demuestra su rol como un agregador de información durante un flujo de negocio.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-licenses
necesita las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-licenses `"RabbitMQ:UserName=<USERNAME_FROM_RABBITMQ_SECRET>" `"RabbitMQ:Password=<PASSWORD_FROM_RABBITMQ_SECRET>" `"Redis:Instances:Core:ConnectionString=<CONNECTION_STRING_FROM_REDIS>" `"Mongo:ConnectionString=<VAULT_TRANSIT_PASSWORD>"Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.
-
Desplegando con Helm desde ArtifactHub
ms-licenses
solo expone una API REST, por lo que desplegaremos un único Helm Chart.-
Preparar el
values-rest.yaml
Local Creamos un archivovalues-rest.yaml
. Este archivo es particularmente interesante porque es donde configuramos los clientes gRPC quems-licenses
usará para orquestar otros servicios.ms-base:env:- name: RESOURCES__ENABLEvalue: "true"- name: RESOURCES__SERVERvalue: "http://ms-services-grpc.inventory.svc.cluster.local:5001"- name: SECURITY__VALIDISSUERvalue: "https://devcodedesignplus.ciamlogin.com/dfee7752-2c8a-4171-ad95-62ddc82d6ed8/v2.0/"- name: SECURITY__CLIENTIDvalue: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: SECURITY__VALIDAUDIENCES__0value: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: RABBITMQ__HOSTvalue: "rabbitmq-cluster.srv-rabbitmq.svc"- name: LOGGER__OTELENDPOINTvalue: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"- name: GRPCCLIENTS__PAYMENTvalue: "ms-payments-grpc.inventory.svc.cluster.local:5001"- name: GRPCCLIENTS__USERvalue: "ms-users-grpc.inventory.svc.cluster.local:5001"- name: GRPCCLIENTS__TENANTvalue: "ms-tenants-grpc.inventory.svc.cluster.local:5001"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%FvirtualService:create: truenamespace: istio-ingresshosts:- services.codedesignplus.appgateways:- istio-ingress/istio-inventory-gatewayhttp:- name: ms-licensesmatch:- uri:prefix: /ms-licenses/rewrite:uri: /route:- destination:host: ms-licenses-rest.inventory.svc.cluster.localport:number: 5000 -
Ejecutar el Despliegue con Helm Usamos
helm upgrade --install
para desplegar el chart en el namespaceinventory
.Terminal window helm upgrade --install ms-licenses-rest codedesignplus/ms-licenses-rest -f ./values-rest.yaml --namespace inventory
-
Parte 3: Verificación del Despliegue
Section titled “Parte 3: Verificación del Despliegue”-
Verificar el Pod en Lens En Lens, bajo “Workloads > Pods”, ahora vemos nuestro nuevo pod
ms-licenses-rest
corriendo en el namespaceinventory
. -
Verificar el
VirtualService
de Istio El Helm chart ha creado automáticamente elVirtualService
que enruta el tráfico desde nuestro Gateway. -
Probar el Acceso a la API
-
Endpoint de Salud: Verificamos que el servicio está vivo accediendo a su endpoint de salud:
https://services.codedesignplus.app/ms-licenses/health/ready
Deberías ver una respuesta “Healthy”.
-
Swagger UI: Para explorar la API, usamos la interfaz de Swagger UI:
https://services.codedesignplus.app/ms-licenses/index.html
Aquí puedes ver los dos contextos principales de la API:
License
para la gestión yOrder
para el flujo de compra.
-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-licenses
, un microservicio complejo que no solo gestiona su propio dominio, sino que actúa como un director de orquesta para coordinar flujos de negocio críticos a través de múltiples servicios.
Este es un ejemplo perfecto del poder de una arquitectura de microservicios bien diseñada: cada servicio tiene su responsabilidad, y servicios como ms-licenses
se especializan en orquestar a los demás para lograr un objetivo de negocio complejo, como la venta de una licencia. Con este componente en su lugar, nuestra plataforma está casi completa.