GitHub user AlexStocks added a comment to the discussion: metadata
一个“dubbo-go metadata 全链路时序图”:
下面这张图按 dubbo-go 当前实现画,把 `provider -> metadata -> service discovery -> consumer`
这条链路串起来了。
```mermaid
flowchart TD
A["Provider 导出服务 URL"] --> B["metadata.AddService(registryId, url)<br/>本地收集
exported URLs"]
A --> C["serviceNameMapping.Map(url)<br/>登记 接口 -> 应用 映射"]
B --> D["生成 MetadataInfo<br/>services / exported URLs / app"]
D --> E["计算 revision<br/>dubbo.metadata.revision"]
E --> F["创建 ServiceInstance"]
F --> G["写入实例 metadata<br/>storage-type / revision / meta-v / endpoints /
metadata-service.url-params"]
G --> H{"metadata-type ?"}
H -->|local| I["导出本地 MetadataService RPC<br/>dubbo / tri v1 / tri v2"]
H -->|remote| J["PublishAppMetadata(app, revision, MetadataInfo)<br/>发布到
metadata report"]
I --> K["注册应用实例到 Service Discovery"]
J --> K
L["Consumer 按接口订阅"] --> M{"provided-by 是否显式配置?"}
M -->|是| N["直接得到应用集合"]
M -->|否| O["serviceNameMapping.Get(url, listener)<br/>从 metadata report
查询/监听 接口 -> 应用"]
N --> P["订阅这些应用实例变化"]
O --> P
K --> P
P --> Q["拿到 ServiceInstance 列表"]
Q --> R["读取实例 metadata 中的 revision"]
R --> S{"storage-type ?"}
S -->|remote| T["GetMetadataFromMetadataReport(revision, instance)"]
S -->|local| U["GetMetadataFromRpc(revision, instance)<br/>调用 provider
MetadataService"]
T --> V["得到 MetadataInfo"]
U --> V
V --> W["遍历 MetadataInfo.Services"]
W --> X["instance.ToURLs(serviceInfo)<br/>实例 + 服务语义 => 最终 URL"]
X --> Y["形成 consumer 可调用 URL 列表"]
```
如果你想更直观一点,也可以把它压成一句话:
`注册中心给实例,mapping 把接口翻成应用,metadata 再把实例翻成服务 URL。`
再补一张“模块职责图”,方便和上面的时序图对着看:
```mermaid
flowchart LR
A["Service Discovery"] -->|"应用实例列表"| B["Consumer"]
C["Metadata Report"] -->|"app metadata / mapping"| B
D["Provider MetadataService"] -->|"local metadata RPC"| B
E["Provider 本地 metadata"] -->|"生成 revision / services"| A
E -->|"发布 app metadata"| C
E -->|"导出 MetadataService"| D
E -->|"登记 接口 -> 应用"| C
```
最容易记混的边界是这三个:
- `Service Discovery` 负责“发现哪个应用实例在线”
- `Mapping` 负责“这个接口属于哪些应用”
- `Metadata` 负责“这些实例到底暴露了哪些服务,以及怎么恢复成最终调用 URL”
GitHub link:
https://github.com/apache/dubbo-go/discussions/3300#discussioncomment-16618685
----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]