O que é GRPC?
O GRPC é uma estrutura de chamada de procedimento remoto de alto desempenho que permite que os desenvolvedores conectem serviços entre os sistemas. Usando o GRPC, os aplicativos do cliente e do servidor podem se comunicar perfeitamente.
Simplificando, o GRPC permite que um aplicativo cliente acesse e use métodos em um aplicativo de servidor (mesmo em máquinas remotas) como se estivesse definido no mesmo aplicativo. É um grande bloco de construção para microsserviços.
Requisitos
Para acompanhar este tutorial, você precisará ter:
Para instalar o compilador de buffer do protocolo, execute o comando conforme fornecido abaixo:
Vá instalar o Google.Golang.org/protobuf/cmd/protoc-gen-go@mais recente
Vá instalar o Google.Golang.org/grpc/cmd/protoc-gen-go-grpc@mais recente
A próxima etapa é atualizar seu caminho para que você possa usar os comandos Protoc:
Caminho de exportação = "$ PATH: $ (GO ENV GOPATH)/BIN"
Servidor Golang GRPC
Para este tutorial, criaremos um servidor GRPC simples que leva a mensagem enviada por um cliente e ecoa de volta.
Comece criando um diretório de trabalho:
MKDIR GRPC-TUT
CD GRPC-TUT
Em seguida, crie um servidor.GO FILE que manterá o código para o servidor GRPC:
Toque no servidor.ir
Abra o arquivo com seu editor de texto e adicione as seguintes linhas:
Pacote principal
importação (
"registro"
"líquido"
)
No código anterior, importamos os pacotes de log e rede, o que nos permitirá registrar erros e estabelecer um ouvinte usando o pacote de rede.
Em seguida, configuraremos a função principal e criaremos um ouvinte na porta 9001/TCP:
func main ()
ouvinte, err: = net.Ouça ("TCP", ": 9001")
se err != nil
registro.Fatal (ERR)
O próximo passo é importar o pacote GRPC para o programa GO. Isso nos permitirá configurar um servidor GRPC e os terminais que desejamos servir antes de conectá -lo com o ouvinte no TCP.
importar "Google.Golang.org/grpc "
De volta à função principal, podemos criar um servidor GRPC, conforme mostrado no código a seguir:
GRPSERVER: = GRPC.Newsserver ()
se err: = grpsserver.Servir (ouvinte); errar != nil
registro.Fatal (ERR)
Criamos um servidor GRPC usando o método Newsserver () no código anterior. Em seguida, servimos o servidor sobre o ouvinte TCP que criamos anteriormente.
E com isso, temos um servidor GRPC. No entanto, não faz muito. Podemos estender isso criando um aplicativo de eco simples.
O aplicativo receberá a mensagem do cliente e retornará a mesma mensagem ao cliente.
Arquivo proto eco
Para configurar nosso aplicativo de eco, precisaremos criar um .arquivo proto. O arquivo proto manterá as definições para o aplicativo.
toque eco.proto
A primeira entrada no arquivo proto será a declaração do pacote. Isso evita colisões de nomes em outros aplicativos.
Syntax = "Proto3";
Echo Package;
opção go_package = "./eco";
Você pode alterar o nome para refletir o nome do seu pacote.
Depois de termos a declaração do pacote, precisamos adicionar definições de mensagem. Isso define um contêiner ou estrutura da mensagem para receber dos clientes:
mensagem de mensagem
corpo de cordas = 1;
Em seguida, precisamos definir o serviço. Em nosso exemplo, chamamos o serviço como ecoService, como mostrado:
ECHOSERVICE DE SERVIÇO
RPC ECHO (mensagem) Retorna (mensagem)
O serviço define um método que um cliente GRPC ligará. O método simplesmente leva a mensagem e retorna a mensagem. Isso cria um aplicativo de eco.
Compilando os buffers de protocolo
Agora, temos o proto definindo para o nosso aplicativo. Em seguida, precisamos gerar as classes que usaremos para ler e escrever dados usando a linguagem de programação Go.
Podemos fazer isso usando o compilador de buffer de protocolo:
protoc --go_out =./echo --go-grpc_out =./echo --go-grpc_opt = require_unimplemented_servers = ECHO falso.proto
Os comandos anteriores devem gerar o código GO necessário para se registrar e ligar para o servidor GRPC.
O próximo passo é definir o RPC para o método de eco. Podemos fazer isso criando um arquivo GO no diretório Echo como:
toque eco.ir
No arquivo, adicione o código como mostrado:
Echo Package
importação (
"FMT"
"Golang.org/x/net/context "// Obter contexto de solicitação
)
Tipo de estrutura do servidor
func (servidor s *) eco (contexto ctx.Contexto, mensagem *mensagem) ( *mensagem, erro)
fmt.Printf ("Mensagem recessora: %s", mensagem.Corpo)
retornar e mensagem body: "oi de volta!", nada
O próximo passo é importar o código dentro do pacote Echo. Volte para o servidor.Vá arquivo e adicione a seguinte cláusula de importação:
importar "GRPC/ECHO"
Você precisará inicializar o gerente do módulo Go para o seu projeto.
No arquivo do servidor principal, adicione as seguintes linhas para criar um novo servidor de bate -papo e registrá -lo:
s: = eco.Servidor
eco.RegisterechoserviceServer (GrPServer, & s)
E com isso, temos o código para o servidor GRPC do caminho.
cliente grpc
O próximo passo é construir um cliente que possa interagir com o servidor GRPC. Comece criando um cliente de arquivo.vá no diretório principal.
tocar ./cliente.ir
Vamos começar com nossas importações. Para este, precisaremos de pacotes de log, contexto, eco e GRPC
importação (
"registro"
"Golang.org/x/net/context "
"Google.Golang.org/grpc "
"GRPC/ECHO"
)
Em seguida, vamos começar com a função principal:
func main ()
// Ponteiro para GRPC Conn
var Conn *Grpc.ClientConn
// Conecte -se ao servidor GRPC (conexão insegura)
Conn, Err: = GRPC.Dial (": 9001", GRPC.WithInsecure ())
se err != nil
registro.Fatal (ERR)
// Fechar Conn
adiar conn.Fechar()
// Echo Service Client
e: = eco.Newechoserviceclient (Conn)
// Corpo da mensagem
Mensagem: = eco.Mensagem
Corpo: "oi",
resp, err: = e.Eco (contexto.Background (), & Message)
se err != nil
registro.Fatal (ERR)
fmt.Printf ("%s", resp.Corpo)
O código anterior implementa um cliente GRPC, que envia a mensagem "HI" e recebe "oi de volta" do servidor.
Teste
Depois de concluído, execute o servidor.vá e cliente.ir. Se for bem -sucedido, o servidor deve responder com "Hi Back", como mostrado abaixo:
Você construiu com sucesso um servidor GRPC e cliente em go.
Conclusão
Este guia serve como um básico absoluto para implementar o GRPC em Go. Se você é novo no GRPC e Protobufs, pode levar tempo para entender a implementação. No entanto, com algumas práticas e implementação, você estará em posição de criar serviços GRPC complexos. Esperamos que você tenha achado este artigo útil. Confira outros artigos do Linux para obter mais dicas e tutoriais.