相关示例:
Dubbo Go 3.x 的核心能力已经围绕 Triple 协议、应用级服务发现、metadata 驱动的服务自省,以及 SDK 侧治理能力展开。这些内容不再只是 3.0 版本的新特性,而是当前 Dubbo Go 应用的常规开发模型。
Triple 是 Dubbo Go 3.x 推荐使用的 RPC 协议,主要实现位于:
protocol/tripleprotocol/triple/triple_protocoltools/protoc-gen-go-tripleTriple 基于 HTTP/1.1 和 HTTP/2 语义,并在线路协议上兼容 gRPC。对于 protobuf 服务,用户先定义 .proto 文件,再通过 protoc-gen-go 和 protoc-gen-go-triple 生成 Go 代码,最后将生成的 handler 注册到 Dubbo Go server。
运行时链路遵循 Dubbo 通用协议抽象:
server.Register(...) 构造 service options 和 invoker,再通过协议 Export 暴露服务;client.Connection,由它构造 invocation 并委托给协议 Refer 返回的 invoker;应用级服务发现是当前 Dubbo Go 默认的服务发现模型。provider 注册应用实例和 metadata;consumer 解析 service 到 application 的映射,再通过 metadata 还原可调用的服务 URL。
重要代码入口包括:
registry/options.go:WithRegisterService、WithRegisterInterface、WithRegisterServiceAndInterface 等 registry type 选项;registry/servicediscovery:应用级注册和订阅;metadata/report 和 metadata/mapping:metadata 上报和 service-name mapping;options.go:WithRemoteMetadata、WithMetadataServiceProtocol 等实例级 metadata 选项。注册模式有三种:
| 模式 | API | 含义 |
|---|---|---|
service | registry.WithRegisterService() | 注册应用级实例,推荐作为默认模式。 |
interface | registry.WithRegisterInterface() | 注册接口级 provider URL。 |
all | registry.WithRegisterServiceAndInterface() | 迁移阶段同时注册两种模型。 |
详细行为和默认值见 应用级服务发现。
应用级服务发现需要 provider metadata。Dubbo Go 支持:
默认 metadata type 是 local。metadata-service-protocol 默认是 dubbo,也可以通过 dubbo.WithMetadataServiceProtocol(...) 显式设置。
Dubbo Go 将许多治理能力放在 SDK 侧扩展点上:
常用内置实现由 imports 包统一导入,这些包的 init 函数会将扩展注册到 common/extension。