"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Posso acessar vários serviços gRPC em uma única conexão?

Posso acessar vários serviços gRPC em uma única conexão?

Publicado em 2024-11-10
Navegar:318

Can I Access Multiple gRPC Services over a Single Connection?

Acessando vários serviços gRPC em uma única conexão

Em cenários onde vários serviços gRPC residem no mesmo servidor ouvindo em um endereço compartilhado, como no exemplo fornecido, pode parecer redundante estabelecer conexões separadas para cada serviço. Este artigo tem como objetivo abordar por que conexões distintas são normalmente necessárias e explora como utilizar uma única conexão para acessar vários serviços gRPC.

Eliminando a necessidade de múltiplas conexões

Para acessar efetivamente vários serviços gRPC hospedados no mesmo servidor, você pode aproveitar uma única conexão de cliente gRPC. Essa abordagem envolve inicializar um objeto grpc.ClientConn e passá-lo para fábricas de clientes de serviço individuais, permitindo que eles compartilhem as mesmas conexões subjacentes.

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

Reutilizando código gerado do Protobuf

O código gRPC gerado fornecido no arquivo pb.go abrange todas as funcionalidades necessárias para executar RPCs. Portanto, não há necessidade de implementações adicionais no lado do cliente, a menos que uma lógica específica precise ser executada automaticamente durante cada chamada.

Usando uma interface por conveniência (opcional)

Para casos em que os serviços têm nomes de métodos, você pode mesclá-los em uma única estrutura para maior conveniência.

type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

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

Ao utilizar essa abordagem, você pode eliminar estabelecimentos de conexão redundantes, resultando em uma implementação mais eficiente e otimizada do lado do cliente para seus aplicativos gRPC.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3