En este documento, se describe cómo implementar una aplicación de ejemplo Cloud Run, Pub/Sub, Workflows y Firestore en modo Datastore (Datastore). Está dirigido a desarrolladores de aplicaciones que deseen implementar flujos de trabajo transaccionales en una aplicación basada en microservicios.
Este documento es parte de una serie que consta de los siguientes elementos:
- Flujos de trabajo transaccionales en la arquitectura de microservicios en Google Cloud: una descripción general de la arquitectura de la aplicación de flujos de trabajo transaccionales de ejemplo que debes implementar en este instructivo.
- Implementación de una aplicación de flujos de trabajo transaccionales de ejemplo en una arquitectura de microservicios en Google Cloud (este documento).
En esta aplicación de ejemplo que implementas en este instructivo, se implementan microservicios para dos patrones arquitectónicos:
- Un patrón saga basado en coreografías
- Una organización síncrona
La aplicación contiene un cliente web. Puedes experimentar con ambos patrones desde Google Cloud CLI y desde el cliente web.
Objetivos
- Implementar componentes del servidor para la arquitectura de saga basada en coreografías
- Implementar componentes del servidor para la arquitectura de organización síncrona
- Probar los componentes del servidor con el comando
curl
- Implementar una aplicación web y ejecutar flujos de trabajo a través de ella
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Cloud Services, Cloud Run, Workflows, Cloud Build, and Cloud Scheduler.
Clona el código fuente
En esta sección, configurarás tu ID del proyecto y clonarás el código fuente en Cloud Shell.
En Cloud Shell, establece tu ID del proyecto:
PROJECT_ID=PROJECT_ID
Reemplaza
PROJECT_ID
por el ID del proyecto de Google Cloud que creaste antes.Configure el ID del proyecto:
gcloud config set project $PROJECT_ID
Clona el repositorio del instructivo:
cd $HOME git clone https://github.com/GoogleCloudPlatform/transactional-microservice-examples
Implementa componentes del servidor para arquitecturas de saga basadas en coreografías
En esta sección, implementarás los componentes del servidor de la aplicación de ejemplo. La aplicación implementa arquitecturas de saga basadas en coreografías, como microservicios en Cloud Run, programas de publicación de eventos en Cloud Scheduler y temas de Pub/Sub.
Compila e implementa imágenes de contenedor
En Cloud Shell, compila una imagen de contenedor para el servicio
Order
llamadoorder-async
e impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/order-async gcloud builds submit --tag gcr.io/$PROJECT_ID/order-service-async gcloud run deploy order-service-async \ --image gcr.io/$PROJECT_ID/order-service-async \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
Compila una imagen de contenedor para el servicio
Customer
llamadocustomer-async
e impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/customer-async gcloud builds submit --tag gcr.io/$PROJECT_ID/customer-service-async gcloud run deploy customer-service-async \ --image gcr.io/$PROJECT_ID/customer-service-async \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
Compila una imagen de contenedor para el servicio
event-publisher
y, luego, impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/event-publisher gcloud builds submit --tag gcr.io/$PROJECT_ID/event-publisher gcloud run deploy event-publisher \ --image gcr.io/$PROJECT_ID/event-publisher \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated \ --set-env-vars "PROJECT_ID=$PROJECT_ID"
Crea un índice para Datastore
En esta sección, crearás un índice para Datastore. El servicio event-publisher
usa este índice para seleccionar los eventos que se deben publicar.
En la consola de Google Cloud, en el menú Datastore, selecciona Modo de Datastore.
Haz clic en Elegir dónde almacenar tus datos y selecciona
us-east1
como la ubicación. Luego, haz clic en Crear base de datos.Crea un índice para Datastore:
cd $HOME/transactional-microservice-examples/services/event-publisher gcloud datastore indexes create index.yaml --quiet
En la consola de Google Cloud, en el menú Datastore, selecciona Índices y espera a que el estado del índice cambie de Indexación a Activo. Este proceso puede tardar unos minutos.
Crea una cuenta de servicio para invocar microservicios en Cloud Run
En Cloud Shell, crea la cuenta de servicio
cloud-run-invoker
:SERVICE_ACCOUNT_NAME="cloud-run-invoker" SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --display-name "Cloud Run Invoker"
Usa esta cuenta de servicio más adelante en este instructivo a fin de invocar las APIs de REST para los microservicios que se ejecutan en Cloud Run.
Define una programación para llamar al servicio de publicador de eventos
En esta sección, debes definir un programa para invocar al publicador de eventos llamado event-publisher
en intervalos de un minuto.
En Cloud Shell, asigna el rol
run.invoker
al servicioevent publisher
.SERVICE_NAME="event-publisher" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
Define una programación para llamar al servicio
Event publisher
llamadoevent-publisher
en intervalos de un minuto mediante la cuenta de serviciocloud-run-invoker
:SERVICE_NAME="event-publisher" SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/event/publish" gcloud scheduler jobs create http event-publisher-scheduler \ --schedule='* * * * *' \ --http-method=GET \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE_ACCOUNT_EMAIL \ --oidc-token-audience=$SERVICE_URL \ --location=us-central1
Crea temas de Pub/Sub
En Cloud Shell, crea los siguientes temas de Pub/Sub:
gcloud pubsub topics create order-service-event gcloud pubsub topics create customer-service-event
El servicio Order
y el servicio event-publisher
usan el tema order-service-event
para publicar eventos del servicio Order
. El tema customer-service-event
se usa para publicar eventos desde el servicio Customer
.
Define un tema para enviar notificaciones de eventos a los microservicios
En esta sección, debes definir el tema push-subscription
para entregar mensajes en temas de Pub/Sub a los microservicios.
En Cloud Shell, asigna el rol
iam.serviceAccountTokenCreator
a la cuenta de servicio de Pub/Sub del proyecto:PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format "value(projectNumber)") gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Este comando permite que la cuenta de servicio cree un token de acceso para invocar microservicios en Cloud Run.
Asigna el rol
run.invoker
al serviciocustomer-service-async
:SERVICE_NAME="customer-service-async" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
Crea un tema
push-subscription
:SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/customer/pubsub" gcloud pubsub subscriptions create push-order-to-customer \ --topic order-service-event \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=$SERVICE_ACCOUNT_EMAIL
Este tema entrega mensajes en el tema
order-service-event
al servicioCustomer
mediante la cuenta de serviciocloud-run-invoker
.Asigna el rol
run.invoker
al servicioorder-service-async
:SERVICE_NAME="order-service-async" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
Crea un tema
push-subscription
:SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/order/pubsub" gcloud pubsub subscriptions create push-customer-to-order \ --topic customer-service-event \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=$SERVICE_ACCOUNT_EMAIL
El tema
push-subscription
entrega mensajes en el temacustomer-service-event
al servicioOrder
mediante la cuenta de serviciocloud-run-invoker
.
Implementar componentes del servidor para una arquitectura de organización síncrona
En esta sección, implementarás los componentes del servidor para la aplicación de ejemplo. Estos componentes implementan una arquitectura de organización síncrona en Cloud Run, así como un flujo de trabajo que se ejecuta con Workflows.
Compila e implementa imágenes de contenedor
En esta sección, debes compilar imágenes de contenedor para microservicios y, luego, implementarlas en Cloud Run.
En Cloud Shell, compila una imagen de contenedor para el servicio
Order
llamadoorder-sync
y, luego, impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/order-sync gcloud builds submit --tag gcr.io/$PROJECT_ID/order-service-sync gcloud run deploy order-service-sync \ --image gcr.io/$PROJECT_ID/order-service-sync \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
Compila una imagen de contenedor para el servicio
Customer
llamadocustomer-sync
y, luego, impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/customer-sync gcloud builds submit --tag gcr.io/$PROJECT_ID/customer-service-sync gcloud run deploy customer-service-sync \ --image gcr.io/$PROJECT_ID/customer-service-sync \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
Compila una imagen de contenedor para el servicio de procesador
Order
llamadoorder-processor
y, luego, impleméntala en Cloud Run:cd $HOME/transactional-microservice-examples/services/order-processor gcloud builds submit --tag gcr.io/$PROJECT_ID/order-processor-service gcloud run deploy order-processor-service \ --image gcr.io/$PROJECT_ID/order-processor-service \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated \ --set-env-vars "PROJECT_ID=$PROJECT_ID"
Crea una cuenta de servicio para invocar microservicios en Cloud Run
En esta sección, volverás a usar la cuenta de servicio cloud-run-invoker
que creaste en Crea una cuenta de servicio para invocar microservicios en Cloud Run.
Implementa un flujo de trabajo para procesar un pedido
En Cloud Shell, asigna los roles
run.invoker
yrun.viewer
a la cuenta de serviciocloud-run-invoker
para el servicioorder-service-sync
.SERVICE_NAME="order-service-sync" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1 gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.viewer \ --platform=managed --region=us-central1
Asigna los roles
run.invoker
yrun.viewer
a la cuenta de serviciocloud-run-invoker
para el serviciocustomer-service-sync
:SERVICE_NAME="customer-service-sync" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1 gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.viewer \ --platform=managed --region=us-central1
Usa la cuenta de servicio
cloud-run-invoker
para implementar un flujo de trabajo:SERVICE_NAME="order-service-sync" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="customer-service-sync" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") cd $HOME/transactional-microservice-examples/services/order-processor cp order_workflow.yaml.template order_workflow.yaml sed -i "s#ORDER-SERVICE-URL#${ORDER_SERVICE_URL}#" order_workflow.yaml sed -i "s#CUSTOMER-SERVICE-URL#${CUSTOMER_SERVICE_URL}#" order_workflow.yaml gcloud beta workflows deploy order_workflow \ --source=order_workflow.yaml \ --service-account=$SERVICE_ACCOUNT_EMAIL
Prueba los componentes de la arquitectura de saga basada en coreografías
En esta sección, debes probar los componentes implementados en la arquitectura de saga basada en coreografías con el comando curl
.
En Cloud Shell, configura las variables de entorno que apunten a las URL de los extremos de la API para los microservicios
customer-service-async
yorder-service-async
:SERVICE_NAME="customer-service-async" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-service-async" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}")
Crea una entrada de cliente
En Cloud Shell, crea un ID de cliente llamado
customer01
mediante el envío de una solicitud a la API al servicioCustomer
llamadocustomer-service-async
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01", "limit":10000}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/limit | jq .
El resultado es similar a este:
{ "credit": 0, "customer_id": "customer01", "limit": 10000 }
Envía un pedido
En esta sección, enviarás un pedido y activarás una asignación de ID de pedido para él.
En Cloud Shell, envía un pedido mediante el envío de una solicitud a la API al servicio
Order
llamadoorder-service-async
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01", "number":10}' \ -s ${ORDER_SERVICE_URL}/api/v1/order/create | jq .
En este caso, debes pedir 10 artículos. Para ello, especifica lo siguiente:
"number": 10
El resultado es similar a este:
{ "customer_id": "customer01", "number": 10, "order_id": "720d1305-b6fd-4f57-aaf4-fd2ca5bdfe1e", "status": "pending" }
La marca
"order_id"
del resultado muestra el ID de pedido único que se asigna al pedido. Copia este ID porque lo usarás en el paso siguiente.Establece el ID de pedido en una variable de entorno:
ORDER_ID=ORDER_ID
Reemplaza
ORDER_ID
por la marca"order_id"
que copiaste en el paso anterior.
Verifica el estado de un pedido
En esta sección, debes verificar cómo cambia el estado de un pedido.
En Cloud Shell, obtén el estado del pedido mediante el envío de una solicitud a la API al servicio
Order
llamadoorder-service-async
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d "{\"customer_id\":\"customer01\", \"order_id\":\"$ORDER_ID\"}" \ -s ${ORDER_SERVICE_URL}/api/v1/order/get | jq .
El resultado se ve de la manera siguiente:
{ "customer_id": "customer01", "number": 10, "order_id": "720d1305-b6fd-4f57-aaf4-fd2ca5bdfe1e", "status": "pending" }
La marca
"status"
en el resultado muestra el estado del pedido. Si el proceso transaccional aún se está ejecutando, el estado es"pending"
. En ese caso, espera unos minutos y vuelve a ejecutar el mismo comando para verificar el estado. Cuando se completa el proceso transaccional, el estado es"accepted"
.Obtén información del cliente para el ID de cliente
customer01
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01"}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/get | jq .
El resultado se ve de la manera siguiente:
{ "credit": 1000, "customer_id": "customer01", "limit": 10000 }
La marca
"credit"
muestra el uso de crédito actual del cliente. Aumenta en 1,000 porque la lógica empresarial de esta transacción es aumentar el crédito en 100 por un artículo.Puedes repetir el proceso de pedido si repites los pasos que se indican en Envía un pedido. Si pides 100 artículos mediante la especificación de
"number": 100
, el estado final del pedido es"rejected"
porque el uso de crédito supera el límite.
Prueba los componentes de la arquitectura de organización síncrona
En esta sección, probarás los componentes implementados de la arquitectura de organización síncrona mediante el comando curl
.
En Cloud Shell, configura las variables de entorno que apuntan a las URL de los extremos de la API de los microservicios
customer-service-sync
,order-service-sync
yorder-processor-service
:SERVICE_NAME="customer-service-sync" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-service-sync" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-processor-service" ORDER_PROCESSOR_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}")
Crea una entrada de cliente
En Cloud Shell, envía una solicitud a la API al servicio
Customer
llamadocustomer-service-sync
para crear un ID de cliente llamadocustomer02
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02", "limit":10000}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/limit | jq .
El resultado se ve de la manera siguiente:
{ "credit": 0, "customer_id": "customer02", "limit": 10000 }
Envía un pedido
En esta sección, enviarás un pedido y verificarás el resultado.
En Cloud Shell, envía un pedido mediante el envío de una solicitud a la API al servicio
Order
llamadoorder-processor-service
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02", "number":10}' \ -s ${ORDER_PROCESSOR_URL}/api/v1/order/process | jq .
En este caso, pides 10 artículos mediante la especificación de
"number": 10
.El resultado es similar a este:
{ "customer_id": "customer02", "number": 10, "order_id": "fb6d5087-dd99-4d5a-84c2-0e381016b9d3", "status": "accepted" }
Debido a que el flujo de trabajo transaccional se realiza de forma síncrona, el cliente ve el resultado de inmediato. En este caso, el estado final es el siguiente:
"accepted"
Obtén la información del cliente con el ID de cliente
customer02
:curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02"}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/get | jq .
El resultado es similar a este:
{ "credit": 1000, "customer_id": "customer02", "limit": 10000 }
El uso de créditos del cliente aumenta en 1,000. Para repetir el proceso de pedido, repite estos pasos. Si solicitas 100 artículos mediante la especificación del valor
"number": 100
, el cliente obtiene de inmediato el resultado"rejected"
porque el uso del crédito supera el límite.
Opcional: Implementa una aplicación web
En esta sección, como extensión opcional del instructivo, implementarás una aplicación web de ejemplo que ejecute el flujo de trabajo transaccional sobre los microservicios que implementaste en la sección anterior. Usa Firebase Hosting para implementar una aplicación web que interactúe con microservicios de backend que se ejecutan en Cloud Run.
Firebase Hosting tiene incorporada la integración en Cloud Run, que te permite alojar la aplicación web y los servicios de microservicios de backend en el mismo dominio. En otros tipos de implementación, es posible que tengas problemas de uso compartido de recursos entre dominios (CORS). Si deseas obtener más información, consulta Cómo autenticar usuarios finales.
La integración de Firebase Hosting realiza las siguientes acciones:
- Aloja elementos estáticos en la aplicación web.
- Redirecciona el acceso a las API para los siguientes servicios de backend en Cloud Run:
- De
/customer-service-sync/*
acustomer-service-sync
- De
/customer-service-async/*
acustomer-service-async
- De
/order-service-sync/*
aorder-service-sync
- De
/order-service-async/*
aorder-service-async
- De
/order-processor-service/*
aorder-processor-service
- De
- Muestra los elementos estáticos de la aplicación web.
Configura Firebase
En esta sección, configurarás Firebase para alojar la aplicación web en Firebase Hosting.
En Cloud Shell, actualiza Node.js a la versión más reciente de LTS para usar Firebase CLI:
nvm install lts/gallium
Agregar recursos de Firebase a un proyecto de Google Cloud existente:
firebase projects:addfirebase $PROJECT_ID
Agrega un alias de proyecto predeterminado para Firebase CLI:
jq -n --arg project_id $PROJECT_ID \ '{"projects": {"default":$project_id}}' > \ $HOME/transactional-microservice-examples/frontend/.firebaserc
Implementa la aplicación web
En esta sección, implementarás la aplicación web en Firebase Hosting.
En Cloud Shell, compila la aplicación de frontend web:
cd $HOME/transactional-microservice-examples/frontend yarn install && yarn build
Implementa la aplicación web en Firebase Hosting:
firebase deploy
Usa la aplicación web
- Ingresa la URL de hosting que copiaste en la sección anterior en tu navegador. Verás la página principal de la aplicación web.
Inicializa la aplicación web con un token de identidad
En esta sección, inicializarás la aplicación web con el token de identidad y pasarás a la página Shopping.
En Cloud Shell, imprime el token de identidad:
gcloud auth print-identity-token
Copia el resultado del comando anterior y pégalo en el cuadro de texto.
Haz clic en Continuar. Se te redireccionará a la página Shopping si el token de identidad es válido.
Agrega artículos a un carrito
- En la aplicación web, haz clic en Agregar al carrito para agregar elementos al carrito.
Revisa los artículos del carrito
- En la aplicación web, haz clic en el ícono de carrito en la barra de navegación para ir a la página Confirmación de la compra. Verás artículos en el carrito.
Envía un pedido con el servicio asíncrono
- En la aplicación web, haz clic en el ícono de carrito de compras en la barra de navegación para ir a la página Confirmación de la compra.
- Haz clic en Enviar pedido (asíncrono). Si el pedido se envió correctamente, se te redireccionará a la página Historial de pedidos.
Envía un pedido mediante el servicio síncrono
- En la aplicación web, haz clic en el ícono de carrito de compras en la barra de navegación para ir a la página Confirmar.
- Haz clic en Enviar pedido (síncrono). Si el pedido se envió correctamente, se te redireccionará a la página Historial de pedidos.
Verifica el historial de pedidos
- En la aplicación web, haz clic en Pedidos en la barra de navegación para ir a la página Historial de pedidos.
Actualiza el estado de un pedido incompleto
- En la aplicación web, haz clic en Pedidos en la barra de navegación para ir a la página Historial de pedidos.
- Haz clic en el ícono de actualización para un pedido individual. El ícono se muestra solo si el pedido se procesa de forma asíncrona y el estado es
pending
.
Verifica el presupuesto actual de un cliente
- En la aplicación web, haz clic en el nombre del cliente (customer-number) en la barra de navegación para ir a su página de perfil.
Restablece el estado en la aplicación web
- En tu navegador, vuelve a cargar la aplicación web. Se restablecen los estados, como los artículos del carrito, el historial de pedidos y la información del cliente, y se te redirecciona a la página principal.
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos individuales
En esta sección, borrarás los recursos individuales que usas en este instructivo.
Desactiva Firebase Hosting
En Cloud Shell, ejecuta el siguiente comando para dejar de entregar tráfico de Firebase Hosting:
firebase hosting:disable -f
Borra servicios en Cloud Run
En Cloud Shell, borra los servicios en Cloud Run:
gcloud run services delete order-service-async \ --platform=managed --region=us-central1 --quiet gcloud run services delete customer-service-async \ --platform=managed --region=us-central1 --quiet gcloud run services delete order-service-sync \ --platform=managed --region=us-central1 --quiet gcloud run services delete customer-service-sync \ --platform=managed --region=us-central1 --quiet gcloud run services delete order-processor-service \ --platform=managed --region=us-central1 --quiet gcloud run services delete event-publisher \ --platform=managed --region=us-central1 --quiet
Borra las imágenes de contenedor que usa Cloud Run
En Cloud Shell, borra las imágenes de contenedor que creaste para este instructivo:
gcloud container images delete \ gcr.io/$PROJECT_ID/order-service-async --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/customer-service-async --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/event-publisher --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/order-service-sync --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/customer-service-sync --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/order-processor-service --force-delete-tags --quiet
Borra el flujo de trabajo
En Cloud Shell, borra el flujo de trabajo:
gcloud beta workflows delete order_workflow --quiet
Borra temas y suscripciones de Pub/Sub
En Cloud Shell, borra las suscripciones de Pub/Sub:
gcloud pubsub subscriptions delete push-customer-to-order --quiet gcloud pubsub subscriptions delete push-order-to-customer --quiet
Elimina los temas de Pub/Sub:
gcloud pubsub topics delete order-service-event --quiet gcloud pubsub topics delete customer-service-event --quiet
Borra registros de Datastore
- En la consola de Google Cloud, en el menú de Datastore, abre Entidades.
- Verifica todas las entidades en el campo
Customer
. - Haz clic en Borrar y, luego, en Confirmar para borrar entidades de forma permanente.
- Repite los pasos 2 y 3 de este procedimiento para los siguientes campos:
Event
Order
ProcessedEvent
Borra el trabajo en Cloud Scheduler
En Cloud Shell, borra el trabajo que se ejecuta en Cloud Scheduler:
gcloud scheduler jobs delete event-publisher-scheduler --quiet \ --location=us-central1
Borra la cuenta de servicio
En Cloud Shell, borra la cuenta de servicio:
gcloud iam service-accounts delete $SERVICE_ACCOUNT_EMAIL --quiet
Borra los recursos del instructivo
En Cloud Shell, borra los recursos que usarás para este instructivo:
cd $HOME rm -rf transactional-microservice-examples
¿Qué sigue?
- Lee la siguiente serie para obtener más información sobre cómo diseñar, compilar y, luego, implementar microservicios:
- Obtén información sobre los beneficios y desafíos de aplicaciones monolíticas y microservicios
- Aprende a definir límites de servicio y refactorizar las aplicaciones monolíticas.
- Obtén información sobre cómo distribuir transacciones entre microservicios
- Aprende a configurar el seguimiento distribuido en un entorno políglota.
- Lee sobre cómo implementar mallas de servicio en una arquitectura de microservicios
- Para obtener más información sobre las arquitecturas de referencia, los diagramas y las prácticas recomendadas, explora Cloud Architecture Center.