Desplegando ms-locations: La Base Geográfica del Ecosistema
Continuamos poblando nuestro clúster con los componentes del ecosistema CodeDesignPlus. En este artículo, desplegaremos un servicio de datos fundamental que será consumido por muchas otras partes de nuestra aplicación: ms-locations.
La gestión de datos geográficos es una necesidad común en casi cualquier aplicación (perfiles de usuario, direcciones de envío, configuración regional, etc.). ms-locations resuelve este problema proporcionando una API centralizada y una fuente de verdad única para un rico modelo de datos que incluye Regiones, Países, Estados, Ciudades, Barrios, Zonas Horarias y Monedas.
Un Vistazo a la Arquitectura de ms-locations
Section titled “Un Vistazo a la Arquitectura de ms-locations”Flujo de la API a los Casos de Uso (CQRS)
Section titled “Flujo de la API a los Casos de Uso (CQRS)”ms-locations expone una API REST muy amplia para gestionar todas las entidades de su dominio. El patrón de arquitectura interna, sin embargo, es consistente y repetible para cada una de ellas.
Este patrón de Commands para operaciones de escritura y Queries para operaciones de lectura se aplica a todas las demás entidades como City, State, Currency, etc.
El Modelo de Dominio: Un Mundo de Datos Interconectados
Section titled “El Modelo de Dominio: Un Mundo de Datos Interconectados”El verdadero poder de ms-locations reside en la riqueza y la interconexión de su modelo de dominio, diseñado siguiendo los principios de Domain-Driven Design (DDD).
Como muestra el diagrama, no se trata de listas aisladas. Es un modelo relacional completo donde cada Country está asociado a una Region, cada State a un Country, y así sucesivamente. Esta estructura garantiza la integridad y la consistencia de los datos geográficos en toda la plataforma.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-locationsnecesita las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-roles `"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-locationssolo expone una API REST, por lo que desplegaremos un único Helm Chart.-
Preparar el
values-rest.yamlLocal Creamos un archivovalues-rest.yamlcon la configuración de las variables de entorno no sensibles y la conexión a Vault. (Nota: El contenido es muy similar al de los microservicios anteriores, solo cambia elserviceen la sección de vault y elhostynameen la devirtualService).# values-rest.yaml para ms-locations-restms-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"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%FvirtualService:create: truenamespace: istio-ingresshosts:- services.codedesignplus.appgateways:- istio-ingress/istio-gatewayhttp:- name: ms-locationsmatch:- uri:prefix: /ms-locations/rewrite:uri: /route:- destination:host: ms-locations-rest.inventory.svc.cluster.localport:number: 5000 -
Ejecutar el Despliegue con Helm Usamos
helm upgrade --installpara desplegar el chart en el namespaceinventory.Terminal window helm upgrade --install ms-locations-rest codedesignplus/ms-locations-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-locations-restcorriendo en el namespaceinventory.
-
Verificar el
VirtualServicede Istio El Helm chart ha creado automáticamente elVirtualServiceque enruta el tráfico desde nuestro Gateway. En Lens, podemos ver la nueva regla params-locations-rest.
-
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-locations/health/readyDeberías ver una respuesta “Healthy”.

-
Swagger UI: Para explorar la API completa, usamos la interfaz de Swagger UI:
https://services.codedesignplus.app/ms-locations/index.htmlAquí puedes ver la gran cantidad de endpoints disponibles para gestionar
City,Country,Currencyy todas las demás entidades del dominio.
-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-locations, un microservicio de datos fundamental que servirá como la fuente de verdad para toda la información geográfica en tu aplicación. Este servicio no solo ahorra un tiempo de desarrollo inmenso, sino que también garantiza la consistencia y la integridad de los datos en todo el ecosistema.
Cada microservicio que añadimos enriquece la funcionalidad global de la plataforma, acercándonos cada vez más a tener una base completa sobre la cual construir nuestra aplicación de inventario.