FoghostCn opened a new issue, #2432:
URL: https://github.com/apache/dubbo-go/issues/2432

   ### metadata 数据主要分 4 个主要部分:
   1. 应用实例接口配置元数据:/dubbo/metadata/dubbo.io/${revision},内容如下所示:
   ```json
   {
     "app" : "dubbo.io",
     "revision" : "4647984502",
     "services" : {
       "dubbo-go/org.apache.dubbogo.samples.api.Greeter:3.0.1:tri" : {
         "name" : "org.apache.dubbogo.samples.api.Greeter",
         "group" : "dubbo-go",
         "version" : "3.0.1",
         "protocol" : "tri",
         "path" : "org.apache.dubbogo.samples.api.Greeter",
         "params" : {
           "application" : "dubbo.io",
           "cluster" : "failover",
           "group" : "dubbo-go",
           "loadbalance" : "random",
           "release" : "dubbo-golang-3.0.4",
           "timestamp" : "1695208370",
           "version" : "3.0.1"
         }
       }
     }
   }
   ```
   
   2. provider 元数据 
/dubbo/metadata/org.apache.dubbogo.samples.api.Greeter/3.0.1/dubbo-go/provider,内容如下所示:
   ```json
   {
     "parameters" : {
       "accesslog" : "",
       "app.version" : "3.0.1",
       "application" : "dubbo.io",
       "auth" : "",
       "bean.name" : "GreeterProvider",
       "cluster" : "failover",
       "config.tracing" : "",
       "environment" : "",
       "execute.limit" : "",
       "execute.limit.rejected.handler" : "",
       "export" : "true",
       "group" : "dubbo-go",
       "interface" : "org.apache.dubbogo.samples.api.Greeter",
       "loadbalance" : "random",
       "max-server-recv-msg-size" : "4mib",
       "max-server-send-msg-size" : "",
       "metadata-type" : "remote",
       "module" : "sample",
       "name" : "dubbo.io",
       "organization" : "dubbo-go",
       "owner" : "dubbo-go",
       "param.sign" : "",
       "pid" : "55273",
       "registry" : "zookeeper",
       "registry.role" : "3",
       "release" : "dubbo-golang-3.0.4",
       "retries" : "",
       "serialization" : "",
       "service.filter" : 
"echo,token,accesslog,tps,generic_service,execute,pshutdown,metrics",
       "side" : "provider",
       "timestamp" : "1695208370",
       "tps.limit.interval" : "",
       "tps.limit.rate" : "",
       "tps.limit.rejected.handler" : "",
       "tps.limit.strategy" : "",
       "tps.limiter" : "",
       "version" : "3.0.1",
       "warmup" : ""
     },
     "canonicalName" : "org.apache.dubbogo.samples.api.Greeter",
     "codeSource" : "",
     "methods" : [ {
       "name" : "SayHello",
       "parameterTypes" : [ "ptr" ],
       "returnType" : "ptr",
       "parameters" : null
     }, {
       "name" : "SayHelloStream",
       "parameterTypes" : [ "interface" ],
       "returnType" : "",
       "parameters" : null
     } ],
     "types" : null
   }
   ```
   
   3. consumer 元数据 
/dubbo/metadata/org.apache.dubbogo.samples.api.Greeter/3.0.1/dubbo-go/consumer,内容如下所示:
   ```json
   {
     "app.version" : "3.0.1",
     "application" : "dubbo.io",
     "async" : "false",
     "bean.name" : "GreeterClientImpl",
     "cluster" : "failover",
     "config.tracing" : "",
     "environment" : "",
     "generic" : "",
     "group" : "dubbo-go",
     "interface" : "org.apache.dubbogo.samples.api.Greeter",
     "loadbalance" : "",
     "metadata-type" : "remote",
     "module" : "sample",
     "name" : "dubbo.io",
     "organization" : "dubbo-go",
     "owner" : "dubbo-go",
     "provided-by" : "",
     "reference.filter" : "cshutdown,metrics",
     "registry.role" : "0",
     "release" : "dubbo-golang-3.0.4",
     "retries" : "",
     "serialization" : "",
     "side" : "consumer",
     "sticky" : "false",
     "timestamp" : "1695208341",
     "version" : "3.0.1"
   }
   ```
   
   4. mapping 接口 - 应用映射关系信息 
/dubbo/mapping/org.apache.dubbo.samples.api.GreetingsService,内容为应用名(applicationName)
   ```
   first-dubbo-provider
   ```
   ### medatadata 相关文件分布:
   ```
   common
   ├── extension  // 扩展相关
   │   ├── metadata_remote.go
   │   ├── metadata_report_factory.go
   │   ├── metadata_service.go
   │   ├── metadata_service_exporter.go
   │   ├── metadata_service_proxy_factory.go
   ├── metadata_info.go // 实例 metadata 实体定义 for 
/dubbo/metadata/dubbo.io/reversion
   config
   ├── instance 
   │   ├── metadata_report.go // MetadataReport 全局缓存
   │   ├── registry_metadata_report.go // registry 相关 MetadataReport 缓存?
   ├── metadata_report_config.go // 配置相关实体
   metadata
   ├── definition
   │   ├── definition.go // 实体定义 provider for 
/dubbo/metadata/org.apache.dubbogo.samples.api.Greeter/3.0.1/dubbo-go/provider,consumer
 是个 map
   │   └── mock.go
   ├── identifier // MetadataReport 接口参数定义
   │   ├── base_metadata_identifier.go
   │   ├── metadata_identifier.go
   │   ├── service_metadata_identifier.go
   │   ├── subscribe_metadata_identifier.go
   ├── mapping // 接口与应用之间的对应关系 for 
/dubbo/mapping/org.apache.dubbo.samples.api.GreetingsService
   │   ├── memory
   │   │   └── service_name_mapping.go
   │   ├── metadata
   │   │   └── service_name_mapping.go
   │   ├── mock_service_name_mapping.go
   │   └── service_name_mapping.go
   ├── report // MetadataReport 各种实现
   │   ├── delegate
   │   │   ├── delegate_report.go
   │   ├── etcd
   │   │   ├── report.go
   │   ├── factory
   │   │   └── report_factory.go
   │   ├── nacos
   │   │   ├── report.go
   │   ├── report.go // MetadataReport 定义,数据上报元数据中心
   │   ├── reporter_metric.go // metric 装饰,添加 metric 事件总线发布
   │   └── zookeeper
   │       └── report.go
   └── service // MetadataService 相关,对其他模块提供 medatadata 接口
   ├── exporter // MetadataService export as service
   │   ├── configurable
   │   │   ├── exporter.go
   │   └── exporter.go
   ├── local
   │   ├── metadata_service_proxy_factory.go
   │   ├── service.go
   │   ├── service_proxy.go
   │   └── service_test.go
   ├── local_service.go
   ├── remote
   │   ├── service.go
   └── remote_service.go
   
   ```
   ### metadata 依赖方:
   ```
   // Metadata 本身维护或扩展
   common/extension/metadata_remote.go
   common/extension/metadata_report_factory.go
   common/extension/metadata_service_exporter.go
   common/extension/metadata_service_proxy_factory.go
   common/extension/metadata_service.go
   common/extension/service_name_mapping.go
   config/instance/metadata_report.go
   config/instance/registry_metadata_report.go
   
   
   // 依赖方
   config/config_loader.go
   config/root_config.go
   config/service_config.go
   config/metadata_report_config.go
   config/registry_config.go
   
   registry/event/metadata_service_url_params_customizer.go
   registry/event/protocol_ports_metadata_customizer.go
   registry/event/service_revision_customizer.go
   registry/servicediscovery/service_discovery_registry.go
   registry/servicediscovery/service_instances_changed_listener_impl.go
   
   ```
   
   - 依赖细节:
   ```
   
   config/config_loader.go:
      79:   func registerServiceInstance() {
     109:               if remoteMetadataService, err := 
extension.GetRemoteMetadataService(); err == nil && remoteMetadataService != 
nil {
     110:                       
remoteMetadataService.PublishMetadata(GetApplicationConfig().Name)
   
   config/metadata_report_config.go:
      83: func (mc *MetadataReportConfig) StartMetadataReport() error {
      88:               instance.SetMetadataReportInstance(tmpUrl)
      91:               return perrors.Wrap(err, "Start MetadataReport failed.")
      96:       localService, err := 
extension.GetLocalMetadataService(constant.DefaultKey)
     105:       if remoteMetadataService, err := 
extension.GetRemoteMetadataService(); err == nil && remoteMetadataService != 
nil {
     106:               remoteMetadataService.PublishServiceDefinition(url)
     110: // selectMetadataServiceExportedURL get already be exported url
     111: func selectMetadataServiceExportedURL() *common.URL {
     113:       metaDataService, err := 
extension.GetLocalMetadataService(constant.DefaultKey)
     118:       urlList, err := 
metaDataService.GetExportedURLs(constant.AnyValue, constant.AnyValue, 
constant.AnyValue, constant.AnyValue)
   
   config/registry_config.go:
      98:                       instance.SetMetadataReportInstanceByReg(tmpUrl)
   
   config/root_config.go:
     176:       if err := rc.MetadataReport.Init(rc); err != nil {
     215:               exportMetadataService()
     224:               MetadataReport: 
NewMetadataReportConfigBuilder().Build(),
     348: func exportMetadataService() {
     349:       ms, err := 
extension.GetLocalMetadataService(constant.DefaultKey)
     366:       expt := 
extension.GetMetadataServiceExporter(constant.DefaultKey, ms)
     386: func publishMapping(sc exporter.MetadataServiceExporter) error {
   
   config/service_config.go:
     323:                               ms, err := 
extension.GetLocalMetadataService("")
     328:                               if err := 
ms.SetMetadataServiceURL(ivkURL); err != nil {
   
   config/instance/registry_metadata_report.go:
     35:        regInstances = make(map[string]report.MetadataReport, 8)
     39: // GetMetadataReportByRegistryProtocol obtain metadata report instance 
through registry config
     40: func GetMetadataReportByRegistryProtocol(protocol string) 
report.MetadataReport {
     57: // SetMetadataReportInstanceByReg set metadata reporting instances by 
registering urls
     58: func SetMetadataReportInstanceByReg(url *common.URL) {
     65:        fac := extension.GetMetadataReportFactory(url.Protocol)
     67:                regInstances[url.Protocol] = 
fac.CreateMetadataReport(url)
   
   registry/event/metadata_service_url_params_customizer.go:
     58:        ms, err := local.GetLocalMetadataService()
     63:        url, err := ms.GetMetadataServiceURL()
     74:        
instance.GetMetadata()[constant.MetadataServiceURLParamsPropertyName] = 
string(str)
   
   registry/event/protocol_ports_metadata_customizer.go:
     51:        metadataService, err := local.GetLocalMetadataService()
     60:        list, err := metadataService.GetExportedServiceURLs()
   
   registry/event/service_revision_customizer.go:
     54:        ms, err := local.GetLocalMetadataService()
     81:        ms, err := local.GetLocalMetadataService()
   
   registry/servicediscovery/service_discovery_registry.go:
      67:       metaDataService                  service.MetadataService
      83:       metaDataService, err := local.GetLocalMetadataService()
      95:               metaDataService:                  metaDataService,
     106:       return s.metaDataService.UnexportURL(url)
     113:       err := s.metaDataService.UnsubscribeURL(url)
     184:       ok, err := s.metaDataService.ExportURL(url)
     211:       _, err := s.metaDataService.SubscribeURL(url)
   
   registry/servicediscovery/service_instances_changed_listener_impl.go:
     225:               remoteMetadataServiceImpl, err := 
extension.GetRemoteMetadataService()
     229:               metadataInfo, err = 
remoteMetadataServiceImpl.GetMetadata(instance)
     235:               proxyFactory := 
extension.GetMetadataServiceProxyFactory(constant.DefaultKey)
     236:               metadataService := proxyFactory.GetProxy(instance)
     237:               metadataInfo, err = 
metadataService.GetMetadataInfo(revision)
   
   ```
   参考文献:
   
   1. 
[https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/overview/](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/overview/)
   2. 
[https://cn.dubbo.apache.org/zh-cn/overview/reference/proposals/service-discovery/](https://cn.dubbo.apache.org/zh-cn/overview/reference/proposals/service-discovery/)
   3. 
[https://cn.dubbo.apache.org/zh-cn/overview/reference/proposals/registry-config-meta/](https://cn.dubbo.apache.org/zh-cn/overview/reference/proposals/registry-config-meta/)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to