gRPC

Conheça o componente e saiba como utilizá-lo.

Micaella Mazoni avatar
Escrito por Micaella Mazoni
Atualizado há mais de uma semana

IMPORTANTE: esta documentação foi descontinuada. Leia a documentação gRPC atualizada no nosso novo portal de documentação.

O componente gRPC permite a realização de chamadas a serviços gRPC do tipo unário e client stream via payload ou via arquivo.

Dê uma olhada nos parâmetros de configuração do componente:

  • Method Type: tipo de método que será utilizado na invocação do serviço. Os tipos de métodos suportados são Unary, Client Stream - via Payload e Client Stream - via File. Esse parâmetro não suporta Double Braces.

  • URL: endereço de chamada do serviço gRPC. Ex: localhost:50051. Esse parâmetro não suporta Double Braces.

  • Headers: configura todos os tipos de headers necessários para chamada (ex.: Authorization: Bearer Co4ECg1FeGFtcGxlLnByb3RvIjwKDEh).

  • Service name: nome do serviço que está descrito dentro do arquivo de configuração .proto do servidor gRPC. Esse parâmetro não suporta Double Braces. No exemplo abaixo o Service Name será “Greeter”:

service Greeter {
rpc helloMethod(Hellorequest) returns (HelloResponse);

}

  • Method Name: nome do método que está descrito dentro do arquivo de configuração .proto do servidor gRPC. Esse parâmetro não suporta Double Braces.

No exemplo abaixo o Method Name será “helloMethod”:

service Greeter {
rpc helloMethod(Hellorequest) returns (HelloResponse);

}

  • Proto Descriptor File: base64 do arquivo “Descriptor” do arquivo .proto. Primeiramente, o “Descriptor” deverá ser gerado a partir de um arquivo .proto. Para fazer isso, basta rodar o seguinte comando no diretório corrente que estiver localizado o arquivo .proto:

1. Gerar o arquivo "descriptor"

Arquivo .proto do diretório: Example.proto

Nome do arquivo descriptor a ser gerado: proto.desc

protoc --include_imports --descriptor_set_out=proto.desc Example.proto

Download do compilador protoc: https://grpc.io/docs/protoc-installation/

2. Realizar o encode deste arquivo para base64:

tLmRpZ2liZWUuZ3JwY0IMRGlnaWJlZVByb3RvUAGiAgNITFdiBnByb3RvMw==

3. Informar o base64 na propriedade "Proto Descriptor File"

Esse parâmetro não suporta Double Braces.

  • Payload: o payload de requisição que será enviado ao servidor gRPC. Para o tipo de método Unary, deverá ser utlizado um objeto simples que contenha os campos definidos no arquivo .proto. Para o tipo de método Client Stream - via Payload deverá ser utilizado um array de objetos, onde cada item do array é uma mensagem a ser enviada ao servidor gRPC. Esse parâmetro aceita Double Braces.

  • File Name: nome do arquivo que será usado para enviar o payload no modo Client Stream - via File. Esse arquivo deverá ser um arquivo JSON que contenha um array e, dentro desse array, deve haver as mensagens a serem enviadas ao gRPC server de forma assíncrona (stream).

  • JSON Path: expressão JSON Path que irá determinar como será feita a leitura em stream do arquivo JSON. Somente para o tipo de método Client Stream - via File.

  • Connection Timeout: tempo de expiração da conexão com o servidor (em milissegundos).

  • Request Timeout: tempo de expiração da chamada de requisição do componente com o servidor gRPC (em milissegundos).

  • Fail On Error: se a opção estiver habilitada, a execução do pipeline com erro será interrompida; do contrário, a execução do pipeline continua, mas o resultado vai mostrar um valor falso para a propriedade "success".

IMPORTANTE: note que alguns dos parâmetros acima suportam Double Braces. Para entender como essa linguagem funciona, leia o nosso artigo clicando aqui.

Fluxo de mensagens

Entrada

Espera-se um payload de entrada que será utilizado dentro do parâmetro payload do componente.

Saída

Ao executar um componente SFTP utilizando as operações download, upload ou move, a seguinte estrutura de JSON será gerada:

{
"response": {},
"success": "true"
}

  • response: JSON de resposta recebido do serviço gRPC

  • success: "true" se houve uma conexão e o script foi executado mesmo se retornar erros no stderr

Saída com erro

{
"success": false,
"message": "Something went wrong while trying to call the gRPC server",
"error": "java.net.SocketTimeoutException: connect timed out"
}

  • success: “false” quando a operação falha

  • message: mensagem sobre o erro

  • exception: informação sobre o tipo de erro ocorrido

Para entender melhor o fluxo das mensagens na Plataforma, clique aqui e leia o nosso artigo.

Componente gRPC em Ação

  • Unary

Dado o seguinte arquivo .proto:

Example.proto

syntax = "proto3";
package digibee;

service Greeter {
rpc unary (HelloRequest) returns (HelloReply) {}
rpc clientStream (stream HelloRequest) returns (HelloReply) {}
rpc serverStream (HelloRequest) returns (stream HelloReply) {}
rpc Bidi(stream HelloRequest) returns (stream HelloReply);
}

message HelloRequest {
string name = 1;
string address = 2;
}

message HelloReply {
string message = 1;
int32 status = 2;
}

Primeiramente, é preciso gerar o arquivo “descriptor”:

1. Dentro do diretório do arquivo, executar o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto

2. Com o “descriptor” em mão, gerar o base64 do arquivo proto.desc e adicioná-lo no campo Proto Descriptor File.

Configurações do componente:

Method Type: Unary

URL: localhost:50051

Service Name: Greeter

Method Name: unary

Proto Descriptor File: <BASE64 DO ARQUIVO DESCRIPTOR GERADO ACIMA>

Payload:

{
"name": "Charles",
"address": "390 Fifth Avenue"
}

Connect Timeout: 30000

Request Timeout: 30000

Fail On Error: desabilitado

Resposta

{
"message": "Hi Charles",
"status": 200
}

  • Client Stream - via Payload

Dado o arquivo .proto:

Example.proto

syntax = "proto3";
package digibee;

service Greeter {
rpc unary (HelloRequest) returns (HelloReply) {}
rpc clientStream (stream HelloRequest) returns (HelloReply) {}
rpc serverStream (HelloRequest) returns (stream HelloReply) {}
rpc Bidi(stream HelloRequest) returns (stream HelloReply);
}

message HelloRequest {
string name = 1;
string address = 2;
}

message HelloReply {
string message = 1;
int32 status = 2;
}

Primeiramente, é preciso gerar o arquivo “descriptor”:

1. Dentro do diretório do arquivo, executar o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto

2. Com o “descriptor” em mão, gerar o base64 do arquivo proto.desc e adicioná-lo no campo Proto Descriptor File.

Configurações do componente:

Method Type: Client Stream - via Payload

URL: localhost:50051

Service Name: Greeter

Method Name: clientStream

Proto Descriptor File: <BASE64 DO ARQUIVO DESCRIPTOR GERADO ACIMA>

Payload:

[
{
"name": "Charles",
"address": "390 Fifth Avenue"
},
{
"name": "Paul",
"address": "32 Seventh Avenue"
},

{
"name": "Yan",
"address": "12 Fourth Avenue"
}


]

Connect Timeout: 30000

Request Timeout: 30000

Fail On Error: desabilitado

Resposta

{
"message": "Hi Charles, Paul and Yan",
"status": 200
}

  • Client Stream - via File

Dado o seguinte arquivo .proto:

Example.proto

syntax = "proto3";
package digibee;

service Greeter {
rpc unary (HelloRequest) returns (HelloReply) {}
rpc clientStream (stream HelloRequest) returns (HelloReply) {}
rpc serverStream (HelloRequest) returns (stream HelloReply) {}
rpc Bidi(stream HelloRequest) returns (stream HelloReply);
}

message HelloRequest {
string name = 1;
string address = 2;
}

message HelloReply {
string message = 1;
int32 status = 2;
}

Primeiramente, é preciso gerar o arquivo “descriptor”:

1. Dentro do diretório do arquivo, executar o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto

2. Com o “descriptor” em mão, gerar o base64 do arquivo proto.desc e adicioná-lo no campo Proto Descriptor File.

Configurações do componente:

Method Type: Client Stream - via Payload

URL: localhost:50051

Service Name: Greeter

Method Name: clientStream

Proto Descriptor File: <BASE64 DO ARQUIVO DESCRIPTOR GERADO ACIMA>

File Name: file.json

file.json:
{ "infos": [
{
"name": "Charles",
"address": "390 Fifth Avenue"
},
{
"name": "Paul",
"address": "32 Seventh Avenue"
},

{
"name": "Yan",
"address": "12 Fourth Avenue"
}


]
}

JSON Path: $.infos[*]

Connect Timeout: 30000

Request Timeout: 30000

Fail On Error: desabilitado

Resposta

{
"message": "Hi Charles, Paul and Yan",
"status": 200
}
Respondeu à sua pergunta?