Fun with Queues es un sistema de gestión de colas para parques temáticos. El proyecto simula la gestión de colas y el flujo de visitantes en un parque de atracciones, utilizando múltiples microservicios para manejar diferentes aspectos como el registro de visitantes, la gestión de atracciones, la monitorización de tiempos de espera y la actualización del mapa del parque en tiempo real.
La base de datos MySQL almacena los datos esenciales del parque, incluyendo:
- parque: Información del parque, como su aforo máximo y actual.
- visitante: Datos de los visitantes como ID, nombre, contraseña, ubicación actual y destino.
- atraccion: Información sobre las atracciones del parque, como su ID, tiempo de ciclo, capacidad de visitantes, y estado.
- mapa: Estado actual del mapa del parque.
- ciudades: Información básica de las ciudades, incluyendo nombre y temperatura.
Microservicio encargado del registro y autenticación de visitantes. Soporta comunicaciones tanto por sockets como por API REST para gestionar el registro y la modificación de información de los visitantes. Utiliza HTTPS para asegurar la comunicación y almacena contraseñas con un hash para mayor seguridad.
Microservicio que simula los sensores en las atracciones. Envía el número de personas en la cola de la atracción al servidor de tiempos de espera a intervalos aleatorios.
Servidor encargado de recibir datos de los sensores y calcular los tiempos de espera para cada atracción en el parque. Estos tiempos se envían al Fwq_engine para actualizar la información en tiempo real.
Aplicación que simula a los visitantes del parque. Permite a los usuarios registrarse, iniciar sesión, y navegar por el parque, interactuando con las atracciones y actualizando su posición en el mapa.
Motor central del sistema que gestiona la lógica del flujo de visitantes y las interacciones con las atracciones. Calcula y actualiza el tiempo de espera y el estado de cada atracción basándose en los datos proporcionados por los sensores y el servidor de tiempos de espera.
API RESTful que proporciona una interfaz para interactuar con el Fwq_engine, permitiendo a otros sistemas y aplicaciones acceder y actualizar datos sobre el estado del parque y sus atracciones.
Interfaz de usuario basada en ReactJS que muestra un mapa interactivo del parque, el estado de las atracciones y permite a los visitantes ver y gestionar sus datos.
- Editor de código: Visual Studio Code
- Lenguaje de programación: Go (Golang)
- Bases de datos: MySQL
- Transmisión de eventos: Apache Kafka
- Interfaz de usuario: ReactJS
- Herramientas de administración de bases de datos: MySQL Workbench
Para desplegar la aplicación, sigue estos pasos:
-
Configura la base de datos MySQL:
- Crea las tablas utilizando el script
ParqueAtracciones.sql
. - Rellena las tablas con datos iniciales.
- Crea las tablas utilizando el script
-
Configura y ejecuta los microservicios:
- Asegúrate de que Apache Kafka esté en funcionamiento.
- Configura los microservicios (
Fwq_registry
,Fwq_sensor
,Fwq_waitingTimeServer
,Fwq_engine
) con los parámetros adecuados (IP, puerto, etc.). - Ejecuta los microservicios en el orden requerido para asegurar que se comunican correctamente.
-
Configura y ejecuta la API y el Front-End:
- Despliega la API REST (
Api_Engine
) y configura las rutas necesarias. - Despliega el front-end basado en ReactJS y asegúrate de que se conecte correctamente a la API.
- Despliega la API REST (