zeromicro/zero-examples

访问 rpc 时为什么不能直接使用 protobuf 生成的 Client,而要封装一层

wuyazi opened this issue · 3 comments

例如以下代码
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)),
	}
}

这个东西我们当时做时候是希望把 pb.go 包一层,万一后面不使用 protobuf 了可以直接替换掉。
同时也是为了简化早期 go-zero 的 rpc 的使用,因为当时 grpc 需要自己 TakeConn,在放回去的。为了屏蔽这一层,所以有这样的一层封装。

等到后面几个版本,我们直接把 pb 的Request,Response 定义 type 定义过来了。
conn 连接也简化了。。所以其实这个现在存在的意义也不是特别大了。

This issue is stale because it has been open for 30 days with no activity.

This issue was closed because it has been inactive for 14 days since being marked as stale.