如我所知,可以为任何支持GRPC的语言生成GRPC客户机。但是,对于同一个proto文件,服务器上的服务可以使用不同的语言实现吗?
例如,我有一个proto文件:
service Greeter {
rpc SayHello (Request) returns (Reply) {}
}
service Goodbye {
rpc SayGoodBye(Request) returns (Reply) {}
}
message Request {
string name = 1;
}
message Reply {
string message = 1;
}是否可以用不同的语言实现2种服务Greeter和告别,例如:
Golang
当我将这两个服务分成两个不同的proto文件时,情况如何?
如果可以用不同的语言来做,这是一个好的做法吗?我能想到的用法是团队的所有成员都不能用同一种语言工作,比如很难招募新的Golang开发人员,而团队需要招募一些Java开发人员来继续这个项目。
发布于 2021-08-06 05:01:20
Proto文件是泛型合同,可供共享相同契约的许多不同应用程序/服务使用。通常的做法是为不同语言构建同一组proto文件,并由使用这些语言的应用程序使用,而不会失去通用性。
所以是的,Greeter可以用Golang实现,再见可以用Java实现,只要它们正确地实现了必要的gRPC接口。
您可以将服务分离到不同的proto文件中,但这将取决于它们之间的相关性。如果您正在提供一组特定的功能,这些功能可以很好地结合在一起,那么最好在同一个proto文件中使用。在这种情况下使用最好的判断,就像您决定在同一个模块中放置一组Python类时使用的方式一样。
关于在不同语言上使用服务是否是好/坏实践的最后一个问题,请记住,gRPC允许基于同一原始协议的许多语言精确地允许协议满足不同的需求。例如,您可以有一个Python,它是一个非常用户友好的Python,它通过gRPC与C++服务器进行通信,目的是利用C++性能。只要从proto契约中正确地实现服务,考虑到应用程序的需求,您就可以自由地使用您想要的语言。
https://stackoverflow.com/questions/68676145
复制相似问题