Implementación de Streaming del Servidor con gRPC y Protobufs
Clase 15 de 22 • Curso de Go Avanzado: Protobuffers y gRPC
Contenido del curso
- 6

RPC y gRPC: Protocolos para Comunicación Eficiente entre Servicios
08:36 - 7

Comparativa de JSON y Protobufers en Intercambio de Datos
08:57 - 8

Definición de Servicios gRPC con Protocol Buffers en Go
04:28 - 9

Implementación de Repositorios y gRPC en Go con PostgreSQL
12:00 - 10

Implementación de Servidor gRPC para Gestión de Estudiantes
12:50 - 11

Pruebas de API gRPC con Postman y Docker
04:08 - 12

Definición de Servicios gRPC en Go para Pruebas y Exámenes
03:39 - 13

Implementación de gRPC Server y Métodos en Go
17:45 - 14

Implementación de Streaming del Cliente con gRPC en Go
16:53 - 15

Implementación de Streaming del Servidor con gRPC y Protobufs
16:25 - 16

Implementación de Streaming gRPC del Lado del Servidor en Go
16:24 - 17

Streaming Bidireccional con gRPC: Implementación y Pruebas
16:04 - 18

Pruebas de Streaming Bidireccional con gRPC y Postman
04:55 - 19

Implementación de Cliente gRPC en Go para Comunicación con Servidor
13:11 - 20

Implementación de Streaming en gRPC: Servidor y Bidireccional
12:16
¿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
-
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.
-
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
-
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.
- Recibe un stream de
-
GetStudentsPerTest: El servidor responde con un flujo continuo de estudiantes inscritos en un examen.
- Recibe una
GetStudentsPerTestRequest. - Devuelve un stream de
Student.
- Recibe una
¿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.protode 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_idytest_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
Enrollmentpara almacenar los datos en la tablaenrollments. - 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
- Modularidad: Importar archivos Protobuf externos para optimizar y mantener la eficacia del código.
- Consistencia: Reutilizar mensajes y estructuras existentes cuando sea posible para reducir la redundancia.
- 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.