微服务框架 go-micro 代理 proxy 接受消息值最大修改
keyword: MaxCallRecvMsgSize
go-micro 框架自带了 proxy 用来代理微服务之间的rpc请求,因为框架内部封装好了 client(本质是服务对服务直接请求) 可以在golang端轻松修改 clientGrpc.MaxRecvMsgSize,clientGrpc.MaxSendMsgSize 来设置请求数据
go-micro 框架默认服务间最大响应值是4M.
1 2 3 4
| set MICRO_REGISTRY=etcd set MICRO_REGISTRY_ADDRESS=127.0.0.1:2379 micro proxy
|
然而在 micro proxy 中这两个参数是失效的,导致公司C++客户端进行rpc调用的时候不能请求一些大型的数据内容,追了一下源码,发现grpc官方已经把4M固定死,但是还是留了口子让我们通过CallOption改动对应的值
前置条件:
所有的 service 必须修改 DefaultMaxMsgSize
1 2 3 4 5 6 7 8 9 10 11 12 13
| import ( ... serverGrpc "github.com/micro/go-micro/v2/server/grpc" )
const maxMsgSize int = 8 * 1024 * 1024
func init() { serverGrpc.DefaultMaxMsgSize = maxMsgSize }
|
构建proxy
改动点有两个
-
init 方法中必须要把 micro server 的 DefaultMaxMsgSize改掉
-
然后就是 Client.Init 去初始化 CallOption
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
package main
import ( "github.com/micro/go-micro/v2" "github.com/micro/go-micro/v2/client" clientGrpc "github.com/micro/go-micro/v2/client/grpc" serverGrpc "github.com/micro/go-micro/v2/server/grpc" "github.com/micro/micro/v2/cmd" "google.golang.org/grpc" )
const maxMsgSize int = 8 * 1024 * 1024
func init() { serverGrpc.DefaultMaxMsgSize = maxMsgSize }
func main() {
cmd.Init(func(options *micro.Options) { err := options.Client.Init(func(options *client.Options) { clientGrpc.CallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize))(&options.CallOptions) }) if err != nil { panic(err) } }) }
|
1 2 3 4
| set MICRO_REGISTRY=etcd set MICRO_REGISTRY_ADDRESS=127.0.0.1:2379 go run proxy.go proxy
|