Soporte para gRPC
En este tutorial, exploraremos cómo añadir soporte gRPC a un microservicio existente, utilizando el generador codedesignplus:microservice
. Veremos cómo configurar gRPC y cómo exponer los servicios de tu microservicio para ser consumidos por otros servicios a través de este protocolo. Tomaremos el microservicio de Clientes creado en el artículo anterior como ejemplo.
¿Por qué gRPC?
gRPC es un framework moderno de alto rendimiento para RPC (Remote Procedure Call), desarrollado por Google. Utiliza Protocol Buffers (protobuf) como lenguaje de definición de interfaz y soporta varios lenguajes de programación. gRPC ofrece ventajas significativas sobre REST, especialmente en microservicios, gracias a su:
- Eficiencia: Serialización binaria con protobuf que reduce el tamaño de los mensajes y el tiempo de procesamiento.
- Rendimiento: Permite comunicación bidireccional y streams, ideal para escenarios de baja latencia.
- Tipado Fuerte: Los archivos
.proto
aseguran una comunicación consistente entre cliente y servidor. - Generación Automática de Código: Facilita la creación de clientes y servidores en varios lenguajes.
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Tener creado el microservicio Clients siguiendo el tutorial anterior.
¿Qué Aprenderás?
- Cómo agregar soporte gRPC a un microservicio existente utilizando el generador
codedesignplus:microservice
. - Cómo definir servicios gRPC utilizando archivos
.proto
. - Cómo configurar un servidor gRPC en tu microservicio.
- Cómo implementar los servicios gRPC en el código de tu microservicio.
Añadiendo Soporte gRPC
El generador codedesignplus:microservice
facilita la incorporación de gRPC a tu microservicio. Usaremos el generador con la opción grpc
.
-
Abre tu terminal y navega al directorio raíz de tu microservicio de Clientes y ejecuta el siguiente comando:
Terminal window yo codedesignplus:microservice grpc -
Después de la ejecución del comando, deberás ver una nueva estructura de archivos con los componentes de gRPC.
Modificando el Servicio gRPC
Ahora que hemos añadido gRPC a nuestro microservicio, vamos a personalizar el servicio gRPC.
Archivo .proto
El archivo clients.proto
define los servicios y mensajes gRPC para nuestro microservicio. El generador habrá creado un archivo base.
Para este ejemplo, vamos a definir un servicio bidireccional para consultar el cliente por su id.

Implementación del Servicio gRPC
El generador ha creado una clase base ClientService
. Ahora, debemos implementar cada uno de los métodos definidos en el archivo .proto
.
Para este ejemplo, implementamos el método GetClient
que recibe un mensaje GetClientRequest
y lo convierte a la query GetClientByIdQuery
para ser procesado por el handler
.

Configuración de Mapster
Para mapear la respuesta del handler
al mensaje gRPC, necesitamos configurar Mapster.

Configuración del Servidor gRPC
El generador también actualizó el archivo Program.cs
para registrar el servicio gRPC. Generalmente, no necesitarás modificar esto, pero es importante conocer dónde se configura el servidor gRPC.
app.MapGrpcService<ClientService>().RequireAuthorization();
Compilación
Para asegurarnos de que nuestro microservicio con gRPC se compila correctamente, ejecutaremos el comando dotnet build
en la raíz del proyecto. El resultado de la compilación se mostrará en la consola y se generará una carpeta bin
con los archivos binarios necesarios para ejecutar el microservicio.

Conclusiones
En este tutorial, hemos aprendido cómo agregar soporte gRPC a un microservicio existente utilizando el generador codedesignplus:microservice
. Hemos visto cómo definir un archivo .proto
, cómo implementar los servicios gRPC, y cómo configurar el servidor gRPC en nuestro microservicio. Ahora, tu microservicio de Clientes puede ser consumido a través de gRPC, además de REST.
Esto te proporcionará una base sólida para construir microservicios eficientes y escalables, utilizando la combinación de REST y gRPC según tus necesidades.
Espero que este borrador sea de utilidad. ¡Avísame si tienes alguna otra solicitud o quieres hacer ajustes!