问题标签 [grpc-go]

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 投票
1 回答
2749 浏览

go - 部署 Rest + gRPC 服务器部署到带有入口的 k8s

我使用了一个示例 gRPC HelloWorld 应用程序https://github.com/grpc/grpc-go/tree/master/examples/helloworld。这个例子在本地系统中运行顺利。

我想使用 Ingress 将其部署到 Kubernetes。

以下是我的配置文件。

service.yaml - 作为 NodePort

入口.yaml

我无法使用 url 向服务器发出 gRPC 请求xyz.com/grpc。得到错误

xyz.com如果我对错误提出请求是

任何帮助,将不胜感激。

0 投票
1 回答
2141 浏览

javascript - 本地主机上带有 TLS 的 web gRPC

我有一个使用本地受信任证书的 Go 服务器和客户端,它们相互通信完美无缺。现在我也希望 Go 服务器与 web-grpc 实例进行通信。Insecure 不起作用,因为浏览器会强制 HTTP2 通过 TLS 或完全拒绝它。毕竟;无论如何,它也应该适用于生产中的 TLS。另一个问题也是 CORS,我还想不出将其提供给https://github.com/improbable-eng/grpc-web的服务器实现版本以添加原始标头。但首先要做的事情。

我提供了一个简单的 HTML 和 Webpack 构建 JS,我通过 TLS 提供了一个简单的 Golang FileServer。

我首先生成了一个新的 TLS 证书/密钥(已经工作的 Go Server/Client 对成功使用):

然后我将它添加到 macOS 钥匙串中以获得信任:

这是我使用的 Protobuf 文件:

然后构建:

这是我提供的简单 HTML 页面:

然后是JS模块:

像这样使用 Webpack 构建的(输出到./dist/main.js并由 读取index.html):

www.wp-ts.loc测试域在我的域中,/etc/host因此它可以模拟为具有证书的域并将所有流量重新路由到 localhost。

现在这是我在所有大型库开销中似乎都找不到的问题,因为这似乎主要是针对 NodeJS 的。没有凭据的 Webpack 构建器new GCDServiceClient()可以很好地构建,但是浏览器当然不会允许非 TLS 样式(暂时不考虑 CORS)。然后使用凭证作为测试(这当然是危险的,但我一直在尝试,在 grpc-web 样式上找不到好的文档)给出了明显的 NodeJS 问题,它不能使用文件系统:

也许我只是在接近这个完全错误的问题,而且我也知道grpc-web实现仍处于一个非常脆弱的阶段,但是你如何使它能够通过 HTTP2/TLS(带证书)正确连接,也许如果知道得到要添加到https://github.com/improbable-eng/grpc-web的服务器的 CORS 标头,我在端口 3000 添加到我的侦听器中。

对不起,大要点,但我希望有人可以帮助我。我很高兴能开始使用 Go + Browser gRPC/Protobuf :D

非常感谢您!

0 投票
2 回答
1567 浏览

microservices - 在 gRPC 服务间通信中传播 traceID

我正在开发一些 gRPC 微服务,并使用上下文传递任何标头和元数据。我正在使用 opentracing 进行跟踪,并且我的一个 gRPC 服务调用了其他 gRPC 服务,此时我在传播上下文时遇到了问题,因为它没有保留元数据和 traceID。我的代码如下

在上面的代码中,我正在调用服务D,我必须使用我可以接受的元数据重新创建一个新的上下文,但我不确定如何将 tracIds 传播到服务D

0 投票
2 回答
600 浏览

go - 在 Go 中查找 gRPC 调用的客户端名称

我使用 protobufs 来定义我的模型和 gRPC 服务,并为 Go (.pb.go) 生成了 protos。当我对服务进行 gRPC 调用时,我想在服务器中找出调用服务器 API 的客户端/应用程序的名称。API中的上下文参数在这里有什么帮助吗?

0 投票
1 回答
768 浏览

go - golang中的grpc服务器并发模型

我在 golang 中创建了一个示例 gRPC 客户端和服务器(使用了 protobufs)。我了解 golang 中的并发模型。但是,我试图了解服务器中的并发模型,该服务器接受来自同一客户端(客户端上的多个 goroutine)/多个客户端的并行请求。

进一步来说:

  1. 当一个新的 gRPC 调用到来时,服务器是否会创建一个新的 goroutine?
  2. 这些 goroutine 共享哪些数据?是否grpcServer.Serve为跨 goroutine 共享的数据设置边界,即之前设置的所有内容都是共享的?(我正在考虑Java中的线程共享全局数据的线程)
0 投票
1 回答
2221 浏览

hyperledger-fabric - 实例化链码时如何解决“在检索块之前完成上下文:上下文已取消”?

实例化命令成功完成,但在分析对等日志时,您可能会注意到:

2019-04-17 17:25:52.581 UTC [gossip.state] commitBlock -> DEBU 48c [canal-contrato] 已提交区块 [1] 有 1 个交易

2019-04-17 17:25:52.581 UTC [common.deliver] DeliverBlocks -> DEBU 48d [channel: canal-contrato] 为 192.168.16.1:48230 交付块 (0xc00023f9c0)

2019-04-17 17:25:52.581 UTC [fsblkstorage] waitForBlock -> DEBU 48e 将等待更新的块。maxAvailaBlockNumber=[1],waitForBlockNum=[2]

2019-04-17 17:25:52.586 UTC [common.deliver] DeliverBlocks -> DEBU 48f 上下文取消,中止等待下一个块

2019-04-17 17:25:52.586 UTC [common.deliverevents] func1 -> DEBU 490 关闭交付流

2019-04-17 17:25:52.586 UTC [comm.grpc.server] 1 -> INFO 491 流式调用已完成{"grpc.start_time": "2019-04-17T17:25:50.441Z", "grpc.service ":"protos.Deliver","grpc.method":"DeliverFiltered","grpc.peer_address":"192.168.16.1:48230","error":"上下文在块检索前完成:上下文取消","grpc.代码”:“未知”,“grpc.call_duration”:“2.144399922s”}

谁能告诉我我可能做错了什么以及这个错误的后果是什么?

笔记:

  • 订购者日志不显示任何类型的错误
  • 所有容器都正常运行
  • 我正在使用节点版本 8.9.0(使用 npm 5.5.1)
  • 我有 1 个组织,有 1 个同行、1 个 CA 和 1 个已订购(只是为了测试)
  • 我正在使用 hyperlegder 面料 1.4 版
0 投票
1 回答
3056 浏览

go - golang 中 server.GracefulStop() 的行为

我有一个 gRPC 服务器,并且我已经实现了 gRPC 服务器的正常关闭,就像这样

这工作正常。相反,如果我在主 goroutine 中编写grpcServer.Serve()逻辑,而是将关闭处理程序逻辑放入另一个 goroutine,server.GracefulStop()则通常不会执行之后的语句。某些 DbConnections 已关闭,如果closeDbConnections()完全执行。

server.GracefulStop()是阻塞调用。绝对grpcServer.Serve()在完成之前server.GracefulStop()完成。那么,这个调用返回后,main goroutine 需要多长时间才能停止呢?

有问题的代码

这种情况没有按预期工作。完成后server.GracefulStop()closeDbConnections()可能会运行也可能不会运行(通常不会运行到完成)。我通过从终端按 Ctrl-C 发送 SIGINT 来测试后一种情况。

有人可以解释这种行为吗?

0 投票
1 回答
460 浏览

go - 如何在 Go 中创建通用 GRPC 服务器启动函数

我正在尝试抽象 GRPC 服务器的启动

原来的main函数如下:

我的目标是拥有这样的东西:

但这给了我以下错误:

这似乎collection_api.CollectionServer不是一个有效的interface{}类型。

知道如何进行这项工作吗?

0 投票
1 回答
290 浏览

grpc - gRPC 拦截器 golang- 嵌套调用

我想在另一个 gRPC 函数中调用一个 gRPC 函数(即像一个包装器)。您是否建议使用 gRPC 拦截器来实现它?嵌套 gRPC 调用的最佳实践是什么?

0 投票
4 回答
3171 浏览

go - 如何通过 IP 地址和主机连接到部署的 grpc-server

我想通过给定的 ipaddress 和主机(如 192.168.0.1:50032)连接到已部署的 grpc 服务器,我尝试了很多东西,但是当我检查 grpc 推荐使用 grpc 客户端但我想尝试如何通过邮递员或任何通过 grpc 接口服务器发布。有什么建议吗?