Skip to content

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:

  1. Gestionar las Licencias: Define los diferentes planes o niveles de servicio que se pueden ofrecer en la plataforma.
  2. 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”
Diagrama de Flujo CQRS de ms-licenses
  • API: La API REST se divide en dos contextos principales: License para la gestión administrativa de las licencias, y Order para que los usuarios inicien y consulten sus procesos de compra.
  • Casos de Uso: Los Commands como PayOrder son los más complejos, ya que inician el flujo de orquestación.

El modelo de dominio de ms-licenses es un ejemplo perfecto de cómo un microservicio puede conectar múltiples contextos de negocio.

Diagrama de Agregado de Dominio de ms-licenses
  • 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.
  1. 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>"
    Creando los secretos para ms-licenses en Vault

    Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.

    Verificando los secretos de ms-licenses en la UI de Vault
  2. 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 archivo values-rest.yaml. Este archivo es particularmente interesante porque es donde configuramos los clientes gRPC que ms-licenses usará para orquestar otros servicios.

      ms-base:
      env:
      - name: RESOURCES__ENABLE
      value: "true"
      - name: RESOURCES__SERVER
      value: "http://ms-services-grpc.inventory.svc.cluster.local:5001"
      - name: SECURITY__VALIDISSUER
      value: "https://devcodedesignplus.ciamlogin.com/dfee7752-2c8a-4171-ad95-62ddc82d6ed8/v2.0/"
      - name: SECURITY__CLIENTID
      value: "305f759d-d1d2-467b-9eab-4a61389c7329"
      - name: SECURITY__VALIDAUDIENCES__0
      value: "305f759d-d1d2-467b-9eab-4a61389c7329"
      - name: RABBITMQ__HOST
      value: "rabbitmq-cluster.srv-rabbitmq.svc"
      - name: LOGGER__OTELENDPOINT
      value: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"
      - name: OBSERVABILITY__SERVEROTEL
      value: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"
      - name: GRPCCLIENTS__PAYMENT
      value: "ms-payments-grpc.inventory.svc.cluster.local:5001"
      - name: GRPCCLIENTS__USER
      value: "ms-users-grpc.inventory.svc.cluster.local:5001"
      - name: GRPCCLIENTS__TENANT
      value: "ms-tenants-grpc.inventory.svc.cluster.local:5001"
      vault:
      server: http://vault.vault.svc.cluster.local:8200
      solution: inventory
      token: ANGq0*B2acD1n5%F
      virtualService:
      create: true
      namespace: istio-ingress
      hosts:
      - services.codedesignplus.app
      gateways:
      - istio-ingress/istio-inventory-gateway
      http:
      - name: ms-licenses
      match:
      - uri:
      prefix: /ms-licenses/
      rewrite:
      uri: /
      route:
      - destination:
      host: ms-licenses-rest.inventory.svc.cluster.local
      port:
      number: 5000
    • Ejecutar el Despliegue con Helm Usamos helm upgrade --install para desplegar el chart en el namespace inventory.

      Terminal window
      helm upgrade --install ms-licenses-rest codedesignplus/ms-licenses-rest -f ./values-rest.yaml --namespace inventory
      Instalando el Helm chart de ms-licenses-rest
  1. Verificar el Pod en Lens En Lens, bajo “Workloads > Pods”, ahora vemos nuestro nuevo pod ms-licenses-rest corriendo en el namespace inventory.

    Verificando el pod de ms-licenses en Lens
  2. Verificar el VirtualService de Istio El Helm chart ha creado automáticamente el VirtualService que enruta el tráfico desde nuestro Gateway.

    Verificando el VirtualService de ms-licenses en Lens
  3. 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”.

      Petición exitosa al endpoint de salud de ms-licenses
    • 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 y Order para el flujo de compra.

      Visualizando Swagger UI de ms-licenses-rest

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.