Сервер узла gRPC: как загрузить файл protobuf из другого репозитория Git? - PullRequest
0 голосов
/ 30 октября 2018

Справочная информация:

  • у нас есть несколько микро сервисов, поддерживаемых разными командами
  • Большинство сервисов написаны на Java. но есть один, написанный в Node.js
  • Сервисный интерфейс Node.js определен в файле .proto и хранится в том же репо, что и код Node.js

Требование

  • серверу Node.js теперь нужно вызвать другую службу gRPC (определенную как служба A), чтобы получить некоторые значения. Чтобы сделать вызов gRPC, мне нужно сначала загрузить определение сервиса.

Вопрос:

  • Учитывая, что интерфейс службы (файл .proto) определен в репозитории службы A, как мне загрузить файл proto в мое приложение Node.js? # Node.js # npm
  • каков наилучший способ управления межсервисной связью? мой сервер Node.js должен вызывать другую службу так же, как клиент вызывает сервер gRPC?

1 Ответ

0 голосов
/ 30 октября 2018

Ответ Linux

1) Учитывая, что интерфейс службы (файл .proto) определен в репозитории службы A, как мне загрузить файл proto в мое приложение Node.js?

В среде разработки будет достаточно символической ссылки на каталог proto в ваших папках protobuf.

Позвольте мне привести вам пример. Допустим, у вас есть файлы protobuf в 2 репозиториях и

count.proto

syntax = "proto3";
package count.proto;
import "math/math.proto";
**Your proto code here**

math.proto

syntax = "proto3";
package math.proto
**Your proto code here this just contains messages no servies**

Они находятся в соответствующих каталогах.

<path_to_repo_a>/proto/math/math.proto
<path_to_repo_b>/proto/count/count.proto

Теперь вы делаете символическую ссылку на корень вашего приложения nodejs (где находится package.json).

ln -s <path_to_repo_a>/proto repo_a_proto
ln -s <path_to_repo_b>/proto repo_b_proto

Теперь вы можете генерировать файлы прото. В вашей корневой директории запустите

mkdir -p generated_proto/math
mkdir -p generated_proto/count
// This command below is just to generate messages
protoc --proto_path=./repo_a_proto/ --js_out=import_style=commonjs,binary:generated_proto ./repo_a_proto/math/math.proto
// This generate both the messages and services
protoc --proto_path=./repo_b_proto/ -I./repo_a_proto/  --js_out=import_style=commonjs,binary:proto_ts --grpc_out=generated_proto/ --plugin=protoc-gen-grpc=`which grpc_node_plugin`  ./repo_b_proto/count/count.proto

Это просто переводится в путь двоичного файла плагина. https://github.com/grpc/grpc-node

which grpc_node_plugin 

В производственной среде вы будете просто внедрять папки с помощью таких инструментов ci / cd, как teamcity или jenkins. Теперь все готово.

Каков наилучший способ управления межсервисной связью? мой сервер Node.js должен вызывать другую службу так же, как клиент вызывает сервер gRPC?

Ответ - да. Это просто еще один микросервис.

...