相关示例:
Dubbo Go 当前围绕几个运行时概念组织:应用实例、provider、consumer、protocol、registry、metadata 和治理扩展。现在的应用通常通过 dubbo.go、server、client 中的 API 入口构建;使用配置文件的场景仍然会走 config.RootConfig。
| 层次 | 主要包 | 职责 |
|---|---|---|
| 应用实例 | dubbo.go, options.go | 持有 application、protocol、registry、metadata、metrics、tracing、router、shutdown 等选项。 |
| Provider API | server | 注册 service handler,构造 service options,创建 invoker 并暴露服务。 |
| Consumer API | client | 创建 client,引用服务,创建生成代码服务或泛化服务,并发起远程调用。 |
| Protocol | protocol/base, protocol/triple, protocol/dubbo, protocol/rest | Provider 侧将 invoker 转为网络服务,consumer 侧将 invoker 转为网络调用。 |
| Registry 与发现 | registry, registry/protocol, registry/servicediscovery, registry/directory | 负责注册、订阅、服务发现和注册中心驱动的调用。 |
| Metadata | metadata, metadata/report, metadata/mapping | 负责服务定义、service-to-application 映射和 metadata 上报。 |
| 治理扩展 | filter, cluster, cluster/router, cluster/loadbalance, common/extension | 提供 filter、router、load balance、cluster 策略和扩展注册。 |
当前 server API 下,provider 通常会经历以下流程:
dubbo.NewInstance(...) 创建应用实例并初始化全局选项。ins.NewServer(...) 基于 application、protocol、registry、provider 选项创建 server。server.Register(...) 或 server.RegisterService(...)。ServiceOptions,记录服务 metadata,并创建 invoker。ServiceOptions.Export() 委托协议完成服务暴露。registry/protocol 会协调服务 export、注册中心注册和 metadata 上报。Triple 协议通过 protocol/triple 暴露服务。应用级服务发现路径则通过 registry/servicediscovery 注册应用实例和 metadata。
consumer 通常会经历以下流程:
dubbo.NewInstance(...) 创建应用实例。ins.NewClient(...) 创建带有 registry、protocol、consumer、metadata、metrics、tracing、router 等选项的 client。client.DialWithInfo(...),泛化调用使用 client.NewGenericService(...)。ReferenceOptions,并在需要时初始化 metadata report。registry/protocol。很多实现通过 Go 包初始化注册。导入:
import _ "dubbo.apache.org/dubbo-go/v3/imports"
会加载常用内置 protocol、registry、filter、router、metadata report、tracing exporter、metrics、load balance 和 cluster 策略。用户也可以只按需导入具体实现包。