一个linux的答案
1)鉴于服务接口(.proto 文件)是在服务 A 的 repo 中定义的,我应该如何将 proto 文件加载到我的 Node.js 应用程序中?
在开发环境中,指向 protobuf 文件夹中 proto 目录的符号链接就足够了。
让我给你举个例子。假设您在 2 个存储库中有 protobuf 文件,并且
计数.proto
syntax = "proto3";
package count.proto;
import "math/math.proto";
**Your proto code here**
数学.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
然后您现在可以生成 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 服务器一样调用其他服务?
答案是肯定的。它只是另一个微服务。