Closed nickszeng closed 3 years ago
解决办法二:修改为spring-cloud方式的注册中心 dubbo.registry.address='spring-cloud://localhost' ,此通过spring cloud的discovery client(找到NacosDiscoveryClient)获取实例
mark
解决办法二:修改为spring-cloud方式的注册中心 dubbo.registry.address='spring-cloud://localhost' ,此通过spring cloud的discovery client(找到NacosDiscoveryClient)获取实例
但是这样元数据中看不到具体的接口注册信息,有办法解决吗
This issue may be related with #7172
https://nacos.io/zh-cn/docs/open-api.html 我发现根本就没有输入账号密码的参数,真的有人配置成功的吗?
可以通过将用户名和密码配置在地址参数后(我使用的是dubbo版本是2.7.13
):
dubbo.registries.nacos.address=nacos://my.nacos:8848?username=nacos&password=nacos
标记下,我使用了版本2.7.13,按上面的可以
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
通过这个引入的dubbo2.7.8版本也是可以类似dubbo.registries.nacos.address=nacos://my.nacos:8848?username=nacos&password=nacos处理
官方文档好像没写这个,我的dubbo版本是2.7.7,nacos服务端是2.2.3,客户端是2.0.3
在org.apache.dubbo.config.ConfigCenterConfig#setAddress这个位置发现username和password是在这里赋值,逻辑是从dubbo.registry.address里面拿到
原URL:nacos://[nacos_server_ip]:8848?namespace=dev
改成:nacos://[username]:[password]@[nacos_server_ip]:8848?namespace=dev
具体到解析规则在这里:org.apache.dubbo.common.URL#valueOf(java.lang.String)
帮了大忙了,我按照楼主的方案一解决了我的问题
Environment
Steps to reproduce this issue
maven依赖
-- dubbo版本:2.7.6 -- nacos版本:1.2.1 dubbo配置Nacos报无权限错误
初步以为是未配置注册中心用户名密码 -- 尝试添加如下配置:结果还是一样报错
于是跟踪了下注册流程 1.dubbo通过配置 nacos:// 找到对应注册工厂
可以看出dubbo是通过url参数来初始化Nacos的NamingService DEBUG现场可以看到 用户名密码信息是存在的
2.创建Nacos NamingService服务 org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils#createNamingService
3.从URL解析为Properties对象
org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils#setServerAddr|setProperties
com.alibaba.nacos.api.NacosFactory#createNamingService(java.util.Properties)
com.alibaba.nacos.client.naming.NacosNamingService#NacosNamingService
4.实例化NamingProxy及SecurityProxy对象
DEBUG现场
可以看到从刚开始URL中的用户名密码到后面并未传递到Nacos注册中心。
临时解决方案
1.添加自定义注册中心工厂
2.按如下配置
再次启动不在报错
Actual Result