访问 rpc 时为什么不能直接使用 protobuf 生成的 Client,而要封装一层
wuyazi opened this issue · 3 comments
wuyazi commented
例如以下代码
https://github.com/zeromicro/zero-examples/blob/main/bookstore/api/internal/svc/servicecontext.go
type ServiceContext struct {
Config config.Config
Adder adder.Adder
Checker checker.Checker
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
Adder: adder.NewAdder(zrpc.MustNewClient(c.Add)),
Checker: checker.NewChecker(zrpc.MustNewClient(c.Check)),
}
}
中的 Adder 可否改成 protobuf 生成的 AdderClient,这样写会有什么问题吗?
type ServiceContext struct {
Config config.Config
Adder add.AdderClient
Checker checker.Checker
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
Adder: add.NewAdderClient(zrpc.MustNewClient(c.Add).Conn()),
Checker: checker.NewChecker(zrpc.MustNewClient(c.Check)),
}
}
re-dylan commented
这个东西我们当时做时候是希望把 pb.go 包一层,万一后面不使用 protobuf 了可以直接替换掉。
同时也是为了简化早期 go-zero 的 rpc 的使用,因为当时 grpc 需要自己 TakeConn,在放回去的。为了屏蔽这一层,所以有这样的一层封装。
等到后面几个版本,我们直接把 pb 的Request,Response 定义 type 定义过来了。
conn 连接也简化了。。所以其实这个现在存在的意义也不是特别大了。
github-actions commented
This issue is stale because it has been open for 30 days with no activity.
github-actions commented
This issue was closed because it has been inactive for 14 days since being marked as stale.