-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在Springboot 3中Spring Cloud Gateway 使用Nacos做配置中心,打包Native Image 后,无法通过环境变量和启动参数修改Nacos服务端地址,一直都是默认的127.0.0.1:8848 #12692
Comments
补充: Nacos 对 Native Image 支持存在问题,启动从Nacos获取配置后,无法加载到配置中 |
这应该和nacos没有关系,首先nacos只负责推送新配置, 不负责应用新配置。如果是通过nacos-client直接订阅配置,那么在你的listner中需要自行实现新应用的配置逻辑。 如果是spring cloud, 那么使用新配置,并更新到bean或重建bean的逻辑,需要有spring cloud的实现对象来控制,也就是你依赖的Spring cloud alibaba。。 至于你提供的报错,更是和native没有关系, 单纯的就是你的客户端连接不上服务端,一直处于初始化状态(未完成首次连接)。 建议你排查环境上的问题,比如应用是否和nacos server网络不同,配置错误等等。 |
另外, 一直使用默认值127.0.0.1的问题,也是spring cloud读取本地配置的问题,也需要您自行排查一下。配置错误读取了错误的文件,或者有 |
确实不是直接使用Nacos Client,而是采用Spring Cloud Alibaba,所以这个问题我应该提给Spring Cloud Alibaba 的nacos config 吗? 网络环境已经排查没有问题,我分别是用jar包和native 文件测试验证的,jar是没有问题的。 |
并没有使用 |
那就需要提交issue到spring cloud alibaba社区询问一下了, 因为这个默认值是SCA的,nacos-client本身没有默认值。 |
Describe the bug
打包成本地镜像(Native Image )后,无法通过环境变量,或者启动参数,修改 spring.cloud.nacos.config.serverAddr值,一直获取的是 NacosConfigProperties 中默认的
public static final String DEFAULT_ADDRESS = "127.0.0.1:8848";
Expected behavior
希望能够在打包为Native Image后,通过修改环境变量,或者传入启动参数后,能够正常连接到Nacos服务端,获取到服务配置
Actually behavior
得到错误
How to Reproduce
打包Native Image
启动命令
或者
export SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.1.7:8848 ./gateway
均得到上面的错误,读取了默认的127.0.0.1:8848的服务端地址
初步结论
在Native Image打包的时候,将默认值打包到二进制中了
启动的时候,创建客户端监听,通过
NacosConfigDataLoader
的load方法,从Nacos服务端拉取配置。ConfigService configService = getBean(context, NacosConfigManager.class).getConfigService();
获取配置服务,调用NacosConfigManager
的getConfigService()
方法获取,通过自身属性的nacosConfigProperties.assembleConfigServiceProperties()
获取服务端地址。nacosConfigProperties
的方法有一段是,如果serverAddr不存在,endpoint也不存在时,则设置默认值127.0.0.1:8848
。个人猜测,Native Image打包的时候,将这个方法
assembleConfigServiceProperties()
“固化”下来了,无法通过环境变量或者启动参数进行修改该值。尝试解决
修改
NacosConfigProperties
的assembleConfigServiceProperties()
方法,将properties.put(SERVER_ADDR, DEFAULT_ADDRESS);
修改为:properties.put(SERVER_ADDR, System.getenv("SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR"));
问题得以解决。验证方式
基于上面修改后的代码,重新打包(打包时不设置
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR
的环境变量)。启动前设置环境变量export SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.1.7:8848
后,再启动(./gateway
),观察日志,连接的不再是127.0.0.1:8848
。也不是在打包时的SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR
环境变量关键代码配置类
NacosConfigProperties
代码Desktop (please complete the following information):
Additional context
Pom:
application.yml
其他补充
最终我希望在K8S环境中使用,Nacos部署在K8S中,地址通过k8s的service+端口暴露,为了减少Nacos内置差异(端口偏移量+1000的内置设计),均采用推荐端口。
The text was updated successfully, but these errors were encountered: