开发者社区 > 云原生 > 正文

基于3.0.0使用triple协议实现“应用级发现”失败,WARN日志“instance hasn'

基于3.0.0版本使用triple协议、zookeeper注册中心,配置provider仅通过应用级发现dubbo.application.register-mode=instance,启动服务后观察ZK的services/路径下对应服务并没有注册成功。

配置信息如下

dubbo: application: name: hello-service # 应用名 qos-enable: false logger: slf4j register-mode: instance protocols: tri: name: tri port: 20880 threads: 500

dubbo:

name: dubbo

port: 20415

threads: 500

registry: address: ${zookeeper_host} protocol: zookeeper parameters: register-type: service

报错信息如下

[WARN ] [2021-11-18 16:29:17.156] [Dubbo-framework-scheduler-thread-1] [] [] [ServiceInstanceMetadataUtils.lambda$refreshMetadataAndInstance$1:267] [ [DUBBO] Refreshing of service instance started, but instance hasn't been registered yet., dubbo version: 3.0.0, current host: 172.X.X.X]

补充其他场景测试情况 3.0.0版本 使用3.0.0版本,provider端基于双注册协议(dubbo+triple)启动后ZK上成功显示对应的注册信息(consumer可以通过实例正常访问) 使用3.0.0版本,provider端基于dubbo协议启动后ZK成功显示对应的注册信息(consumer可以通过实例正常访问) 3.0.4版本 使用3.0.4版本,provider端基于triple协议启动后ZK成功显示对应的注册信息(consumer可以通过实例正常访问) NOTE: 在3.0.4版本基于triple协议的测试中,除了dubbo版本不一样外,其他配置、代码均一致。因此想确认下3.0.0版本是不是本就存在问题(对应报错信息见上面的内容),具体问题是什么?如何fix,对应的commit信息是哪里?

3.0.4版本基于应用级注册成功后的ZK信息如下

{ "name":"hello-service", "id":"172.16.128.132:20880", "address":"172.16.128.132", "port":20880, "sslPort":null, "payload":{ "@class":"org.apache.dubbo.registry.zookeeper.ZookeeperInstance", "id":null, "name":"hello-service", "metadata":{ "dubbo.endpoints":"[{"port":20880,"protocol":"tri"}]", "dubbo.metadata-service.url-params":"{"version":"1.0.0","dubbo":"2.0.2","release":"3.0.4","port":"20881","protocol":"dubbo"}", "dubbo.metadata.revision":"29c5c4f1c855128336eb2ff7c8a71d47", "dubbo.metadata.storage-type":"local" } }, "registrationTimeUTC":1637223402423, "serviceType":"DYNAMIC", "uriSpec":null }

期待大家针对3.0.0版本triple协议的应用级发现的相关讨论以及大佬们的指点! 感谢!

原提问者GitHub用户YuWan1117

展开
收起
大圣东游 2023-05-11 19:17:21 186 0
1 条回答
写回答
取消 提交回答
  • 对于 triple 协议,server 的启动方式和 dubbo 的不一样,triple 协议中线程切换会更多一些, 在3.x 早期,对 triple 的测试用例覆盖不全。可能就是有一些问题。在新版本3.0.3+ 对于 triple 协议的 it 基本已经覆盖。基本不会再出现这些问题。 在3.0.3引入多实例后,整体有了很大的变化,所以你描述的在哪里修复的可能不太好去定位。

    但是基本上是由于部分使用了 context(threadlocal)进行传递的,在发生线程切换时会导致信息丢失,相关的 bug 的应该已经修复。

    原回答者GitHub用户EarthChen

    2023-05-12 11:06:44
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载