腾讯今年4月开源的微服务架构 Tars ,是支持多语言的高性能 RPC 开发框架和配套一体化的服务治理平台,可以帮助企业或者用户以微服务的方式快速构建稳定可靠的分布式应用,一经推出受到了广泛关注。今天,腾讯宣布与科大讯飞进行深度技术合作,将 Google Protocol Buffers 与 TARS 自身的编解码协议进行集成,TARS-PB 正式开源。
Protocol Buffers (简称 PB )是 Google 的一种数据交换的格式,它独立于语言,独立于平台,最早公布于 2008年7月。随着微服务架构的发展及自身的优异表现,ProtoBuf 可用于诸如网络传输、配置文件、数据存储等诸多领域,目前在互联网上有着大量应用。
Tars-PB 发布之后,已经使用 PB 作为内部数据交换协议的用户可以更方便地对 Tars 进行集成。
Tars 的服务端与客户端的实现架构图:
通过对 Tars ServantImp 和 ServantProxy 的扩展,以及增加相应的 protobuf codec 实现了 PB 对 Tars 的支持。
对象生成
为了减少对 PB 序列化和反序列化的侵入,对对象仍然采用 PB 原生的生成方式。
Service 生成
接口代码的生成为了保持 Tars 的整体风格按照 Tars 的方式进行生成。
Protoc 插件
Protoc 官方提供了插件机制,只要满足相关的插件规范,用户可以自定义开发自已的插件。Protoc 在生成代码的时候,可以调用用户自定义实现的插件,从而生成用户自定义的代码。
利用 Protoc 的插件机制,来实现 Tars-PB 代码的生成。
使用方法
- 编写 PB 文件
编写一个 proto 描述文件:
message HelloRequest { required string greeting = 1; } message HelloReply { required string reply = 1; } service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} }
- 生成代码
执行命令,通过 PB 官方插件和 Tars 插件生成代码:
protoc ‐‐plugin=protoc-gen-tars-java=${plugin_path} --tars-java_out=${out_path} --java_out=${out_path} ${proto_path}
- 编写业务实现
后续的步骤与正常的 Tars 使用相同。
稿源: 腾讯开源