gRPC

Descubra mais sobre o componente gRPC e saiba como utilizá-lo na Digibee Integration Platform.

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

Parâmetros

Dê uma olhada nas opções de configuração do componente. Parâmetros suportados por expressões Double Braces estão marcados com (DB).

Informações adicionais sobre parâmetros

Service Name

Veja um exemplo de Service Name como “Greeter”:

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

}

Method Name

Veja um exemplo de Method Name como “helloMethod”:

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

}

Proto Descriptor File

Para usar esse parâmetro, o “descriptor” deve ser gerado primeiro a partir de um arquivo .proto. Para fazer isso, siga os passos abaixo:

  1. Gere o arquivo "descriptor" executando o seguinte comando no diretório corrente que estiver localizado o arquivo .proto:

  • 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

Faça o download do compilador protoc em Protocol Buffer Compiler Installation.

  1. Realize o encode deste arquivo para base64:

tLmRpZ2liZWUuZ3JwY0IMRGlnaWJlZVByb3RvUAGiAgNITFdiBnByb3RvMw==
  1. Informe o base64 na propriedade Proto Descriptor File.

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 houver uma conexão e o script for 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, leia a documentação sobre Processamento de mensagens.

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, execute o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto
  1. Com o “descriptor” em mão, gere o base64 do arquivo proto.desc e adicione-o 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, execute o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto
  1. Com o “descriptor” em mão, gere o base64 do arquivo proto.desc e adicione-o 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, execute o comando:

protoc --include_imports --descriptor_set_out=proto.desc Example.proto
  1. Com o “descriptor” em mão, gere o base64 do arquivo proto.desc e adicione-o 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 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
}

Atualizado