gRPC 节点服务器:如何从不同的 Git 存储库加载 protobuf 文件?
gRPC Node Server: how to load protobuf file from a different Git repo?
背景:
- 我们有多个由不同团队维护的微服务
- 大部分服务都是用Java编写的。但是有一个写在 Node.js
- Node.js 服务接口在
.proto
文件中定义并与 Node.js 代码 存储在相同的 repo 中
要求
- Node.js 服务器现在需要调用另一个 gRPC 服务(定义为服务 A)来获取一些值。为了进行 gRPC 调用,我需要先加载服务定义。
问题:
- 鉴于服务接口(
.proto
文件)在服务 A 的存储库中定义,我应该如何将原型文件加载到我的 Node.js 应用程序中? #Node.js #npm
- 管理服务间通信的最佳方式是什么?我的 Node.js 服务器应该像客户端调用 gRPC 服务器一样调用其他服务吗?
一个linux个答案
1) 鉴于服务接口(.proto 文件)是在服务 A 的 repo 中定义的,我应该如何将 proto 文件加载到我的 Node.js 应用程序中?
在开发环境中,符号 link 到 protobuf 文件夹中的 proto 目录就足够了。
让我举个例子。假设您在 2 个存储库和
中有 protobuf 文件
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 应用程序的根目录做一个符号 link(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 服务器一样调用其他服务吗?
答案是肯定的。它只是另一个微服务。
背景:
- 我们有多个由不同团队维护的微服务
- 大部分服务都是用Java编写的。但是有一个写在 Node.js
- Node.js 服务接口在
.proto
文件中定义并与 Node.js 代码 存储在相同的 repo 中
要求
- Node.js 服务器现在需要调用另一个 gRPC 服务(定义为服务 A)来获取一些值。为了进行 gRPC 调用,我需要先加载服务定义。
问题:
- 鉴于服务接口(
.proto
文件)在服务 A 的存储库中定义,我应该如何将原型文件加载到我的 Node.js 应用程序中? #Node.js #npm - 管理服务间通信的最佳方式是什么?我的 Node.js 服务器应该像客户端调用 gRPC 服务器一样调用其他服务吗?
一个linux个答案
1) 鉴于服务接口(.proto 文件)是在服务 A 的 repo 中定义的,我应该如何将 proto 文件加载到我的 Node.js 应用程序中?
在开发环境中,符号 link 到 protobuf 文件夹中的 proto 目录就足够了。
让我举个例子。假设您在 2 个存储库和
中有 protobuf 文件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 应用程序的根目录做一个符号 link(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 服务器一样调用其他服务吗?
答案是肯定的。它只是另一个微服务。