请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

Tim老师 2024-09-28 18:44:08

同学,你是通过启动user-center这个项目,让dubbo注册/dubbo、/services到zookeeper里面的吗?user-center这个项目的依赖版本和我这边是否一致呢?当前dubbo3.2.3这个版本,最终会调用到org.apache.curator.x.discovery.details.ServiceDiscoveryImpl#internalRegisterService这个方法,根据ServiceInstance信息,即user-center这个服务的信息,去到zookeeper里面创建临时节点,也即是/service目录相关信息。其他版本我倒没关注到这个信息

0 回复 有任何疑惑可以回复我~
  • 提问者 java小书童 #1
    谢谢老师出来了,可能是因为我后来把项目停了所以services节点就也没了,再把项目启动就有了,还想问一下这个services节点叫services是在哪里定的,还有麻烦老师提供一下user-center数据库里的数据信息
    回复 有任何疑惑可以回复我~ 2024-09-29 12:10:18
  • Tim老师 回复 提问者 java小书童 #2
    公司生产环境升级,晚点回去我找了传到慕课网git仓库下,问题统一回复,辛苦久等了
    回复 有任何疑惑可以回复我~ 2024-09-29 19:29:57
  • Tim老师 回复 提问者 java小书童 #3
    /services节点创建的时机,总的来说是在创建注册中心的时候(用于服务注册和发现),org.apache.dubbo.registry.client.ServiceDiscoveryRegistryFactory#createRegistry,我们这里是zookeeper为注册中心,所以最终是创建ZookeeperServiceDiscovery实例的时候,构造方法里面,org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery#ZookeeperServiceDiscovery,最终是这行代码赋值services: this.rootPath = getRootPath(registryURL); ,这个枚举类CuratorFrameworkParams的一个枚举值:ROOT_PATH,然后将这个值最终传给了ServiceDiscoveryImpl的basePath属性。因此最终注册 /user-center这个服务的时候,即调用org.apache.curator.x.discovery.details.ServiceDiscoveryImpl#internalRegisterService这个方法,就是通过调用pathForInstance()的内部方法pathForName()将 /services和/user-center 合在一起
    回复 有任何疑惑可以回复我~ 2024-09-29 22:42:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信