"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Puedo acceder a varios servicios gRPC a través de una única conexión?

¿Puedo acceder a varios servicios gRPC a través de una única conexión?

Publicado el 2024-11-10
Navegar:597

Can I Access Multiple gRPC Services over a Single Connection?

Acceder a varios servicios gRPC a través de una única conexión

En escenarios en los que varios servicios gRPC residen en el mismo servidor escuchando en una dirección compartida, como en el ejemplo proporcionado, Puede parecer redundante establecer conexiones separadas para cada servicio. Este artículo tiene como objetivo abordar por qué normalmente se requieren distintas conexiones y explora cómo utilizar una única conexión para acceder a múltiples servicios gRPC.

Eliminar la necesidad de múltiples conexiones

Para acceder de manera efectiva a varios servicios gRPC alojados en el mismo servidor, puede aprovechar una única conexión de cliente gRPC. Este enfoque implica inicializar un objeto grpc.ClientConn y pasarlo a fábricas de clientes de servicios individuales, permitiéndoles compartir las mismas conexiones subyacentes.

func main() {
    cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c1 := pb.NewSubscriberServiceClient(cc)
    c2 := pb.NewDropperServiceClient(cc)
}

Reutilización del código generado desde Protobuf

El código gRPC generado proporcionado en el archivo pb.go abarca toda la funcionalidad necesaria para realizar RPC. Por lo tanto, no hay necesidad de implementaciones adicionales del lado del cliente, a menos que sea necesario ejecutar automáticamente una lógica específica durante cada llamada.

Uso de una interfaz para mayor comodidad (opcional)

Para casos en los que los servicios tienen características distintas nombres de métodos, puede fusionarlos en una sola estructura para mayor comodidad.

type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

func main() {
    // ... as above ...
    sd := &SubscriberDropper{c1, c2}
}

Al utilizar este enfoque, puede eliminar el establecimiento de conexiones redundantes, lo que resulta en una implementación del lado del cliente más eficiente y optimizada para sus aplicaciones gRPC.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3