我正在尝试想出更好的方法来处理 grpc 中 4mb 消息大小的限制。我需要一种方法来测量客户端收到的 grpc 响应的大小。当响应超过 4mb 限制时,grpc 将显示如下错误消息:
无法问候:rpc 错误:代码 = ResourceExhausted desc = grpc:收到的消息大于最大值(74000087 与 4194304)
“74000087”是响应的实际大小。这是如何计算的?有没有办法获得这个值?
我已经阅读了有关该主题的多篇文章,但什么也没找到?有人可以帮忙吗?谢谢。
我的实现是使用golang
我是新手,Go并且每天都在学习它。我context cancelled在我们的项目中看到了很多错误,这让我很恼火。所以我想深入挖掘一下,弄清楚发生了什么。
如果我没记错的话,用“简单”的术语来说,上下文取消意味着给定的请求(通过 grpc 使用 gokit)已经超时。正确的?如果是这样,解决此问题的最佳方法是什么?
我应该调查为什么这些请求超时(可能底层数据库查询需要很长时间或其他什么)并修复这些请求吗?
它是Go内部的东西,可能暗示与某些相关的东西Go吗?
开始处理此错误的最佳方法是什么?现在,我只看到“上下文已取消”,但不知道为什么会这样。
我有以下代码来测试 golang 接口值何时为 false。
package main
import (
"fmt"
)
func Foo(x interface{}) {
fmt.Println("33, x == nil = ", x == nil)
}
func main() {
var x *int = nil
fmt.Println("11, x == nil = ", x == nil)
var a interface{}
fmt.Println(22, &a, &a == nil, a == nil) // 0xc0000935c0 false true
Foo(x)
}
Run Code Online (Sandbox Code Playgroud)
结果是
11, x == nil = true
22 0xc00010a040 false true
33, x == nil = false
Run Code Online (Sandbox Code Playgroud)
我不明白输出。特别是,我不明白为什么&a不是 nil,因为 a …
我创建了需要在 goroutine 中运行的函数,代码正在运行(这只是说明问题的简单示例)
go rze(ftFilePath, 2)
func rze(ftDataPath,duration time.Duration) error {
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情
errs := make(chan error, 1)
err := go rze(ftFilePath, 2)
if err != nil{
r <- Result{result, errs}
}
Run Code Online (Sandbox Code Playgroud)
但不确定如何操作,大多数示例都展示了使用https://tour.golang.org/concurrency/5时如何操作func