Skip to content

Repository files navigation

OrpheusFlow

Sistema distribuido de streaming de audio políglota (Go + Java): reproducción en tiempo real vía gRPC, metadatos por RMI y notificaciones por RabbitMQ.

🇪🇸 Español: Combina un servidor de alto rendimiento en Go que sirve fragmentos de audio con gRPC, un servidor Java que orquesta metadatos y expone RMI a clientes Java, y un servicio de notificaciones por RabbitMQ que simula envío de correos con frase motivadora.

🇺🇸 English: Pairs a high-performance Go streaming server (gRPC chunks) with a Java metadata orchestrator (RMI for Java clients) and an email notification service consuming RabbitMQ messages.


Sistema Distribuido de Streaming de Audio con Arquitectura Políglota (Go + Java)

Status Go Java gRPC RabbitMQ

Este proyecto implementa una plataforma de streaming de audio utilizando una arquitectura de microservicios políglota. Integra componentes en Go para tareas de alto rendimiento (streaming) y Java para la gestión de lógica de negocio y metadatos.


Arquitectura del Sistema

[Cliente Streaming (Java)]
    │── RMI ──▶ [ServidorDeAudiosMetadatos (Java)]
    │                  │── gRPC ──▶ [ServidorDeStreaming (Go)] ◀── streaming
    │                  │── RabbitMQ ──▶ [ServidorDeEnvioCorreos (Java)]
    │                  │── RMI Callback ──▶ [Administrador (Java)]
    │
[Administrador (Java)]
    └── RMI ──▶ [ServidorDeAudiosMetadatos (Java)]

Protocolos de Comunicación

  • RMI: Comunicación entre Cliente Streaming / Administrador y Servidor de Metadatos
  • gRPC: Streaming de audio entre Servidor de Metadatos y Servidor de Streaming (Go)
  • REST: Notificaciones HTTP desde Servidor de Streaming (Go) hacia Servidor de Metadatos
  • RabbitMQ: Mensajería asíncrona para envío de notificaciones de correo

Estructura del Proyecto (3 Carpetas Principales)

├── Cliente/
│   ├── ClienteStreaming/       # Java + RMI - Reproducción y consulta de audios
│   │   ├── controller/
│   │   ├── facade/
│   │   └── ClienteStreamingMain.java
│   └── Administrador/          # Java + RMI - Registro de audios y CallBacks
│       ├── controller/
│       ├── facade/
│       └── AdministradorMain.java
├── ServidorDeAudiosMetadatos/  # Java - RMI + REST + gRPC + RabbitMQ
│   ├── controller/             # RMI, REST y gRPC controllers
│   ├── facade/                 # Lógica de negocio
│   ├── dao/                    # Acceso a datos (memoria)
│   └── ServidorMain.java
├── ServidorDeStreaming/        # Go - gRPC - Envío de fragmentos de audio
├── ServidorDeEnvioCorreos/     # Java - RabbitMQ - Notificaciones asíncronas
│   ├── controller/
│   ├── facade/
│   └── ServidorCorreosMain.java
├── shared/                     # DTOs e interfaces compartidas
├── proto/                      # Archivos .proto para gRPC
└── streaming/ + metadata/      # Código Go generado de protobuf

Componentes Principales

Go (Performance)

  • ServidorDeStreaming: Sirve fragmentos de audio mediante gRPC. Al recibir una solicitud de reproducción, notifica al Servidor de Metadatos vía REST.

Java (Lógica y Orquestación)

  • ServidorDeAudiosMetadatos: El corazón del sistema. Expone RMI (clientes Java), REST (notificaciones Go) y gRPC (interoperabilidad). Publica mensajes a RabbitMQ al registrar audios.
  • Cliente/ClienteStreaming: Cliente que usa RMI para login, listar tipos de audio, consultar metadatos y reproducir.
  • Cliente/Administrador: Interfaz de gestión con RMI para registrar audios y recibir callbacks cuando los clientes reproducen.
  • ServidorDeEnvioCorreos: Consumidor de RabbitMQ que simula envío de correos con metadatos y frase motivadora.

Requisitos e Instalación

Prerrequisitos

  • Java JDK 8+ y Maven
  • Go 1.20+
  • RabbitMQ (corriendo localmente en puerto 5672)

Credenciales de Prueba

Usuario Contraseña
usuario1 password123
admin admin123
usuario_go password123

Ejecución Paso a Paso

Para ejecutar el sistema completo de forma manual, siga estos pasos en orden:

1. Preparación

Asegúrese de tener RabbitMQ corriendo en su máquina (puerto 5672).

Compile los componentes de Java y genere los stubs de gRPC:

mvn clean compile

2. Iniciar el Servidor de Metadatos (Java)

Este es el núcleo del sistema. Maneja RMI, REST y gRPC.

mvn exec:java -Dexec.mainClass="ServidorDeAudiosMetadatos.ServidorMain"

3. Iniciar el Servidor de Streaming (Go)

Abra una nueva terminal y ejecute el servidor de alto rendimiento:

cd ServidorDeStreaming
go run main.go

4. Iniciar el Servidor de Envío de Correos (Java)

Abra una nueva terminal. Este componente escuchará las notificaciones de RabbitMQ:

mvn exec:java -Dexec.mainClass="ServidorDeEnvioCorreos.ServidorCorreosMain"

5. Iniciar los Clientes

Ahora puede interactuar con el sistema utilizando cualquiera de los clientes:

Administrador (Gestión y Callbacks):

mvn exec:java -Dexec.mainClass="Cliente.Administrador.AdministradorMain"

Cliente de Streaming (Usuario final):

mvn exec:java -Dexec.mainClass="Cliente.ClienteStreaming.ClienteStreamingMain"

Configuración y Puertos

Servicio Protocolo Puerto
Streaming Server (Go) gRPC 50051
Metadata Server (Java) gRPC 50052
Metadata Server (Java) REST 8081
RMI Registry RMI 1099
RabbitMQ AMQP 5672

Desarrollo Manual

Generación de Código Protobuf

Si modificas los archivos en proto/, debes regenerar los stubs:

Para Java (Maven):

mvn generate-sources

Para Go:

protoc --go_out=. --go-grpc_out=. proto/streaming.proto
protoc --go_out=. --go-grpc_out=. proto/metadata.proto

Compilación Individual

  • Java: mvn compile
  • Go: go build ./ServidorDeStreaming/

Almacenamiento y Gestión de Audios

Los archivos de audio se centralizan en la carpeta audio_files/. El Servidor de Streaming (Go) los lee directamente desde esta ubicación.

  • Audios precargados: El sistema viene con archivos de prueba del 1.mp3 al 5.mp3.
  • Registro de nuevos audios:
    1. Ejecute el Cliente Administrador.
    2. Seleccione la opción 2 (Registrar nuevo audio).
    3. Ingrese los metadatos (Título, Artista, Género).
    4. Proporcione la ruta del archivo. Puede usar rutas relativas (ej: audio_files/1.mp3) o rutas absolutas (ej: C:\Musica\audio.mp3).
    5. El servidor recibirá los bytes, asignará un ID y guardará el archivo automáticamente en la carpeta audio_files/ para que sea reproducible inmediatamente por los clientes.

About

No description or website provided.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages