Contenido del curso
gRPC
- 6

gRPC: qué lo hace más rápido que REST
08:35 min - 7

JSON vs Protobuf: cuándo usar cada uno
08:56 min - 8

Definir un StudentService con proto buffers en Go
04:27 min - 9

Implementación de Repositorios y gRPC en Go con PostgreSQL
11:59 min - 10

Criando o primeiro servidor gRPC em Go
12:50 min - 11

Prueba tu servidor gRPC con Postman
04:08 min - 12

Definiendo el servicio de test en gRPC
03:38 min - 13

Implementando servidor gRPC con PostgreSQL en Go
17:45 min - 14

Client streaming en gRPC con Go
16:53 min - 15

Implementación de Streaming del Servidor con gRPC y Protobufs
Viendo ahora - 16

Streaming del servidor con gRPC en Go
16:23 min - 17

Streaming bidireccional en gRPC con Go
16:04 min - 18

Prueba de streaming bidireccional con gRPC
04:55 min - 19

Implementando un cliente gRPC en Go
13:10 min - 20

Streaming bidireccional en gRPC con Go
12:16 min
Conclusión
Implementación de Streaming del Servidor con gRPC y Protobufs
Resumen
¿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.