No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Implementación de Streaming del Servidor con gRPC y Protobufs

15/22
Recursos

¿Cómo implementar streaming del lado del servidor en gRPC con Protobuf?

El streaming del lado del servidor es una técnica poderosa en un entorno de programación asíncrono. Sobre todo, representa una forma eficiente de manejar grandes cantidades de datos o de proporcionar actualizaciones en tiempo real en sistemas distribuidos. En este contexto, vamos a trabajar con gRPC y Protobuf para construir los prototipos necesarios y configurar los servicios.

¿Cómo definimos los mensajes en Protobuf?

Vamos a comenzar definiendo mensajes Protobuf necesarios para nuestra aplicación. Estos mensajes son fundamentales en la comunicación entre cliente y servidor.

Mensajes de solicitud y respuesta

  1. EnrollmentRequest: Se utiliza para matricular estudiantes en un examen específico. Los campos necesarios son:

    • student_id: ID del estudiante.
    • test_id: ID del examen.
  2. GetStudentsPerTestRequest: Utilizado por el cliente para solicitar los estudiantes inscritos en un examen. El servidor responde con una transmisión de estudiantes:

    • test_id: ID del examen solicitado.

¿Cómo crear servicios con streaming en gRPC?

A continuación, definimos los servicios en nuestro archivo Protobuf. Aquí nos centramos en dos funciones RPC.

Servicios RPC

  1. EnrollStudents: Permite al cliente enviar un flujo de solicitudes de inscripción que el servidor procesa.

    • Recibe un stream de EnrollmentRequest.
    • Responde con un mensaje de aceptación simple, reutilizando estructuras existentes como SetQuestionResponse.
  2. GetStudentsPerTest: El servidor responde con un flujo continuo de estudiantes inscritos en un examen.

    • Recibe una GetStudentsPerTestRequest.
    • Devuelve un stream de Student.

¿Cómo importar archivos Protobuf externos?

Uno de los grandes beneficios de los Protobuf es la capacidad de importar y reutilizar definiciones existentes. Para esta implementación:

  • Importamos el archivo student.proto de otro módulo.
  • Nos aseguramos de que nuestras definiciones de Go estén actualizadas para manejar estas importaciones.

¿Cómo compilar y generar el código para gRPC?

Luego de hacer las modificaciones en el archivo Protobuf, es necesario compilar los paquetes para que gRPC y Protobuf generen los códigos necesarios de servicio y cliente. Asegúrate de mantener el comando de compilación a mano para:

protoc --go_out=. --go-grpc_out=. path/to/your/file.proto

¿Cómo configurar la base de datos para manejar enrollments?

Para gestionar las inscripciones en nuestra base de datos, crearemos una nueva tabla denominada enrollments:

  • Se compone de student_id y test_id.
  • Añadimos claves foráneas para garantizar la integridad referencial con las tablas de estudiantes y exámenes.

¿Cómo adaptar el modelo de datos en Go?

A continuación, creamos una estructura de modelo:

type Enrollment struct {
    StudentID string
    TestID    string
}

¿Cómo implementar los métodos en el repositorio de Postgres?

Implementación de las funciones para obtener inscripciones y estudiantes dentro de nuestro repositorio:

  • SetEnrollment: Recibe un contexto y un objeto Enrollment para almacenar los datos en la tabla enrollments.
  • GetStudentsPerTest: Retorna un conjunto de estudiantes inscritos usando un identificador de examen, gracias a la siguiente query SQL:
SELECT id, name, age FROM students 
WHERE id IN (
  SELECT student_id FROM enrollments WHERE test_id = ?
)

Buenas prácticas al utilizar Protobuf y gRPC

  1. Modularidad: Importar archivos Protobuf externos para optimizar y mantener la eficacia del código.
  2. Consistencia: Reutilizar mensajes y estructuras existentes cuando sea posible para reducir la redundancia.
  3. Mantenimiento: Mantener comandos y archivos actualizados una vez hechas modificaciones significativas.

La creación e implementación de estos servicios y mensajería en streaming son herramientas esenciales para sistemas escalables y fiables. ¡Adelante, sigue aprendiendo y experimentando! Cada clase te proporciona nuevas habilidades para perfeccionar tus conocimientos en programación de servicios.

Aportes 2

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Existe un error con el video, se repite la información transmitida entre el minuto 00:21 y el minuto 03:22

En este video se comieron por completo la parte de la implementación del SetEnrollment en el postgres.go.

Se valora poder tener acceso a los archivos para poder comparar.