Repositorio con código base para la implementación de un Backend for Frontend (BFF) usando GraphQL como lenguaje de consulta.
Este repositorio está basado en el repositorio de Sagas visto en el tutorial 8 del curso. Por tal motivo, puede usar ese mismo repositorio para entender algunos detalles que este README no cubre.
Este repositorio sigue en general la misma estructura del repositorio de origen. Sin embargo, cuenta con unos ligeros cambios en especial en la estructura del módulo ui
y el nuevo servicio bff
:
- El directorio src/bff_web/ incluye el código del BFF Web. Este servicio cuenta con la siguiente estructura:
- consumidores: Código con la lógica para leer y procesar eventos del broker de eventos.
- despachadores: Código con la lógica para publicar comandos al broker de eventos.
- main: Archivo con la lógica de despliegue y configuración del servidor.
- api: Módulo con la diferentes versiones del API, routers, esquemas, mutaciones y consultas.
- El directorio src/ui/ cuenta ahora solo con código HTML, estilos CSS y JS.
Desde el directorio principal ejecute el siguiente comando.
docker-compose --profiles db up
Este comando descarga las imágenes e instala las dependencias de la base datos.
Desde el directorio principal ejecute el siguiente comando.
flask --app src/aeroalpes/api run
Siempre puede ejecutarlo en modo DEBUG:
flask --app src/aeroalpes/api --debug run
coverage run -m pytest
coverage report
Desde el directorio principal ejecute el siguiente comando.
docker build . -f aeroalpes.Dockerfile -t aeroalpes/flask
Desde el directorio principal ejecute el siguiente comando.
docker run -p 5000:5000 aeroalpes/flask
En el mundo real es probable que ambos proyectos estén en repositorios separados, pero por motivos pedagógicos y de simpleza,
estamos dejando ambos proyectos en un mismo repositorio. Sin embargo, usted puede encontrar un archivo sidecar-requirements.txt
,
el cual puede usar para instalar las dependencias de Python para el servidor y cliente gRPC.
pip install -r sidecar-requirements.txt
Desde el directorio principal ejecute el siguiente comando.
python src/sidecar/main.py
Desde el directorio principal ejecute el siguiente comando.
python src/sidecar/cliente.py
Desde el directorio src/sidecar
ejecute el siguiente comando.
python -m grpc_tools.protoc -Iprotos --python_out=./pb2py --pyi_out=./pb2py --grpc_python_out=./pb2py protos/vuelos.proto
Desde el directorio principal ejecute el siguiente comando.
docker build . -f adaptador.Dockerfile -t aeroalpes/adaptador
Desde el directorio principal ejecute el siguiente comando.
docker run -p 50051:50051 aeroalpes/adaptador
Desde el directorio principal ejecute el siguiente comando.
python src/notificaciones/main.py
Desde el directorio principal ejecute el siguiente comando.
docker build . -f notificacion.Dockerfile -t aeroalpes/notificacion
Desde el directorio principal ejecute el siguiente comando.
docker run aeroalpes/notificacion
Desde el directorio src
ejecute el siguiente comando
uvicorn cliente.main:app --host localhost --port 8000 --reload
Desde el directorio src
ejecute el siguiente comando
uvicorn pagos.main:app --host localhost --port 8001 --reload
Desde el directorio src
ejecute el siguiente comando
uvicorn integracion_gds.main:app --host localhost --port 8002 --reload
Desde el directorio src
ejecute el siguiente comando
uvicorn bff_web.main:app --host localhost --port 8003 --reload
Desde el directorio principal ejecute el siguiente comando.
docker build . -f ui.Dockerfile -t aeroalpes/bff
Desde el directorio principal ejecute el siguiente comando.
docker run aeroalpes/bff
Nota: Antes de poder ejectuar todos los siguientes comandos DEBE tener la base de datos MySQL corriendo.
wget https://archive.apache.org/dist/pulsar/pulsar-2.10.1/connectors/pulsar-io-debezium-mysql-2.10.1.nar
Abrir en una terminal:
docker exec -it broker bash
Ya dentro de la contenedora ejecute:
./bin/pulsar-admin source localrun --source-config-file /pulsar/connectors/debezium-mysql-source-config.yaml --destination-topic-name debezium-mysql-topic
Abrir en una terminal:
docker exec -it broker bash
Ya dentro de la contenedora ejecute:
./bin/pulsar-client consume -s "sub-datos" public/default/aeroalpesdb.reservas.usuarios_legado -n 0
Abrir en una terminal:
docker exec -it broker bash
Ya dentro de la contenedora ejecute:
./bin/pulsar-admin topics list public/default
Abrir en una terminal:
docker exec -it broker bash
Ya dentro de la contenedora ejecute:
./bin/pulsar-admin namespaces set-retention public/default --size -1 --time -1
Para poder ver que los cambios fueron efectivos ejecute el siguiente comando:
./bin/pulsar-admin namespaces get-retention public/default
Nota: Esto nos dejará con una retención infinita. Sin embargo, usted puede cambiar la propiedad de size
para poder usar Tiered Storage
Para seguir la guía oficial de instalación y uso de Debezium en Apache Pulsar puede usar el siguiente link
Para desplegar toda la arquitectura en un solo comando, usamos docker-compose
. Para ello, desde el directorio principal, ejecute el siguiente comando:
docker-compose up
Si desea detener el ambiente ejecute:
docker-compose stop
En caso de querer desplegar dicha topología en el background puede usar el parametro -d
.
docker-compose up -d
docker ps
docker ps -a
docker stop <id_contenedora>
docker rm <id_contenedora>
docker images
docker images rm <id_imagen>
docker exec -it <id_contenedora> sh
fuser -k <puerto>/tcp
docker-compose --profile <pulsar|aeroalpes|ui|notificacion> up