问题标签 [grpc-gateway]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1379 浏览

go - grpc-gateway 与 Twirp RPC 有什么区别

我们已经有了提供 rpc 和 rest 端点的Twrip-RPC 。那么为什么我们需要 grpc-Gateway。与 twirp 相比,它提供了哪些优势。是不是我们可以为 grpc 网关提供自定义端点是唯一的区别。Twrip-rpc 不能做什么 grpc-gateway?

0 投票
1 回答
305 浏览

kubernetes - ingress 不适用于 GRPC 网关。HTTP 请求没有按照入口的预期转发到 GRPC 网关

我已经设置了一个 GRPC 网关,其中包含与 HTTP URL 对应的所有方法。例如v1/my-service。这些路径似乎不适用于我设置的入口。我可以通过使用另一个 pod 使用内部集群 IP 将请求路由到此 URL 来间接发送请求,但是当我尝试直接访问 my-ip/v1/myservice 时,我收到一个几乎没有描述的服务器错误:

发生这种情况是否有原因?当我知道传入的 URL 格式对应于网关中定义的方法时,我不明白为什么会以这种方式收到服务器错误。我想指出,我的入口绝对有效,因为我只是使用这个中间 pod 来路由成功的请求,但我仍然通过入口发送它们。

0 投票
1 回答
1467 浏览

go - 使用 bazel 生成 grpc-gateway、swagger 和 grpc-go 文件

我有一个带有一些服务的单声道存储库(service-0 到 service-4)。有一个 proto 目录,其中存储了 proto 文件。原型文件位于各自的子文件夹中。目录结构如下:

我的工作区文件如下所示:

service-0.proto 文件有以下内容:

我正在使用 bazel 创建 BUILD 文件。所以运行bazel run //:gazelle会在 proto/service-0 目录下创建如下 BUILD.bazel 文件:

现在运行bazel build //proto/service-0:service-0给出以下错误:

所以我将以下行添加到根 BUILD.bazel 文件中,它是如何描述

让瞪羚生成@grpc_ecosystem_grpc_gateway//protoc-gen-swagger/options:options_proto而不是//protoc-gen-swagger/options:options_proto 这没有任何问题。

现在如何使用开发服务所需的 bazel 创建 go-grpc 文件?

运行bazel build //proto/service-0:0_go_proto给出以下错误:

因此对于开发来说,应该可以使用 bazel 生成 go-grpc 文件,以便生成的 grpc 文件存储在 proto/service-x/ 目录中。

另外我正在使用grpc-gateway。所以我在目录中的BUILD.bazel文件中添加了以下几行:service-0

运行bazel build :0_gateway_swagger_grpc给出以下输出:

这工作没有任何问题。但是,当我尝试使用生成网关文件时,bazel build :0_gateway_grpc出现以下错误:

那么我该如何解决这个问题呢?当这个问题得到解决时,我怎样才能让 bazel 在 proto/service-x 目录中创建/复制用于开发的文件?

我正在使用bazelisk和 bazel 版本3.0.0

0 投票
2 回答
2237 浏览

python-3.x - 如何为 python 运行 grpc-gateway

我是 grpc 菜鸟,想为 grpc 服务器的健康检查创建一个 REST 端点。为此,我决定使用 grpc 网关。

但是,文档中用于将 grpc 代理为 json 的 grpc-REST 网关的示例仅适用于 Golang。但我有一个 python 后端,想使用 Google Cloud Endpoints 制作一个基于 gRPC 的 api,可以对传入的 REST 请求进行转码

我确实在这个 stackoverflow答案中找到了一种手动生成注释的方法。但我想知道最好的方法是什么。这是我要生成到类中的示例 .proto 文件。

如何生成 .proto 文件并使用 python 后端创建 grpc-gateway?

0 投票
1 回答
354 浏览

protocol-buffers - grpc-gateway:找不到包“github.com/grpc-ecosystem/grpc-gateway/v2/runtime”

我正在尝试设置 grpc 网关。已经尝试了 Github 上提到的所有步骤。使用以下“github.com/grpc-ecosystem/grpc-gateway/v2/runtime”生成反向代理文件。但是当我去构建它给我这个错误 找不到包“github.com/grpc-ecosystem/grpc-gateway/v2/runtime”

当前 go 版本:go 版本 go1.13.15 darwin/amd64

0 投票
1 回答
759 浏览

go - 如何避免在 buf generate 上复制供应商 proto 依赖项

我正在测试 grpc-gateway 并试图找出在我的 grpc 服务中导入依赖项的最佳方法。我有以下目录结构:

buf.yaml 配置

两件事情

  • 正如你所注意到的,我正在使用buf.build来生成 proto 文件(如果你知道更好的方法,你可以忽略这个事实);
  • 我不是googleapi故意在原始文件下复制,而是希望将它们分开存放在某个地方。我知道 google 建议将所有内容保存在proto文件夹下并仅复制依赖文件(如google/api/annotations.proto),但如果我能以某种方式避免这种情况,我不喜欢将数十个依赖项复制到我的源代码中。

我的问题是,每当我运行时buf generate --path=./proto(请注意路径设置为目录),我都会在文件夹googleapis pb.go下复制proto/googleapis/文件。我觉得这很烦人,无法弄清楚我的设置有什么问题。如果我直接指定每个文件,一切都很好(例如buf generate --path=./proto/api.proto),没有第三方内容被复制。

有没有办法忽略third_party文件​​夹buf generate,如果没有,是否有更好的方法来管理 grpc 依赖项。将文件直接复制到每个 grpc 项目对我来说确实有意义。

0 投票
1 回答
181 浏览

go - 从 grpc-gatway 返回 Html 作为响应

有没有一种方法可以从服务器返回 content-type="application/html"。

grpc-gateway 以键值对返回响应,浏览器无法解析它。

原型定义:

我怎样才能返回html

0 投票
1 回答
968 浏览

grpc - 如何在节点后端实现 gRPC 网关

我正在尝试按照安装指南在 Node.JS 服务器中实现gRPC 网关。

这些步骤是为之编写的,golang但我尝试在 Node.JS 中执行。

我找到了这个响应,还有一些像这个这样的包,所以可以在 node.js 中实现。

阅读“安装指南”后,主要问题似乎是获取二进制文件:

  • protoc-gen-grpc-网关
  • protoc-gen-openapiv2
  • protoc-gen-go
  • protoc-gen-go-grpc

我已经从这里下载了前两个二进制文件,所以问题可能是最后两个。

我假设go来自golang所以我必须搜索类似的东西protoc-gen-node-grpc。我已经看过这个npm 包,但是,我想尽可能地自己实现。我不想依赖第三方。

在这一点上,我必须首先将二进制文件放入我的路径,但没有最后两个。

一旦定义了 gRPC 服务,下一步就是生成 gRPC 存根。我有这条线:

这可以生成文件。我不知道我是否必须使用--js_out--grpc-web_out创建客户端和服务文件。

然后,下一步是使用protoc-gen-grpc-gateway.

我这样做(如指南所说):

这会生成一个.go文件:myproto.pb.gw.go.

进入文件说:

因此,我假设步骤已正确完成,但是:如何将其执行到我的 Node.JS 服务器中?

我有一个使用 Express API 的节点项目,我想使用 grpc-gateway 而不是 express API 端点......但我只有一个.go文件。

我的原型版本是:

库协议 3.14.0

提前致谢。

0 投票
2 回答
775 浏览

grpc-go - grpc-gateway 运行时版本冲突

从最近几天开始,protoc 生成器正在使用 github.com/grpc-ecosystem/grpc-gateway 的 v2 版本生成代码。我想继续使用 github.com/grpc-ecosystem/grpc-gateway v1.16.0。我无法删除导致冲突的 v2 版本。我尝试从 go.mod 中删除,从 $GOPATH 中清除。我想我的协议生成器无法使用 v1 版本。请指导我如何同步 grpc-gateway 运行时包。

使用以下命令生成消息和服务

注意:它正在生成 grpc.pb.go 文件和 pb.go 文件,这进一步导致了问题。

0 投票
2 回答
1203 浏览

go - 使用 protoc-gen-grpc-gateway 生成的代码出错

我是 Protocol Buffers 和 gRPC 的新手。现在我正在尝试在 Go 中使用 grpc + grpc-gateway 构建客户端/服务器架构。

我试图遵循一些例子,但我总是遇到同样的问题。protoc使用i run生成代码后go build,我收到此错误:

这是go.mod

这是hello_world.proto

这是存储库的链接:https ://github.com/riccardodrielli/grpc-gateway-test

我看到生成的 go 文件之间的一个区别是它们正在导入不同的 protobuf 库。
protoc-gen-go进口产生的一种github.com/golang/protobuf/proto
protoc-gen-grpc-gateway进口产生的一种google.golang.org/protobuf/proto
这可能是问题的原因吗?

我仍然不清楚应该使用哪一个以及如何在两个生成器中强制使用相同的。

我是 grpc 新手,在这一点上很迷茫,所以我可以省略一些重要信息。任何建议都将受到欢迎。

谢谢