Apollo配置中心拉取,通过单独打包解决 Get config services failed from http://阿里云局域网访问IP:8080/services/config?appId=MyAppId&ip=192.168.145.1 Cause Could not complete get operation
Apollo配置中心拉取,通过单独打包解决 Get config services failed from http://阿里云局域网访问IP:8080/services/config?appId=MyAppId&ip=192.168.145.1 Cause Could not complete get operation
业务场景:
在公司内部局域网可以正常访问阿里云局域网,apollo公共包,在apollo db中配置的是阿里云局域网的IP,在微服务中项目可以正常的启动且拉取apollo的文件到本地。
但是如果是外地办公,通过VPN的方式,是无法访问阿里云局域网,只能通过域名访问或者阿里云公网IP来访问。需要单独打包配置阿里云公网IP来启动微服务项目且拉取配置文件到本地。
1. 方法1-临时解决
微服务启动日志临时解决,本地文件自己追加写入 需要的配置项,弊端:但是项目启动的时候,仍然一直不停的拉取,且报错:
Get config services failed from http://阿里云局域网访问IP:8080/services/config?appId=MyAppId&ip=192.168.145.1 Cause Could not complete get operation
2023-01-05 11:30:09.443 [main] INFO c.c.f.f.i.p.DefaultApplicationProvider#initAppId [line:96] - App ID is set to myProject by app.id property from /META-INF/app.properties
2023-01-05 11:30:09.444 [main] INFO c.c.f.f.i.p.DefaultServerProvider#initialize [line:34] - Loading C:\opt\settings\server.properties
2023-01-05 11:30:09.445 [main] INFO c.c.f.f.i.p.DefaultServerProvider#initEnvType [line:109] - Environment is set to [FAT] by JVM system property 'env'.
2023-01-05 11:30:09.445 [main] INFO c.c.f.f.i.p.DefaultServerProvider#initDataCenter [line:155] - Data Center is set to [fat1] by property 'idc' in server.properties.
2.maven打包方法及排除依赖方法
maven打包的时候,需要注释掉:
<!--<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.0</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
</configuration>
</plugin>-->
注释掉:
<!--<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.0</version>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
</configuration>
</plugin>-->
D:\git\2021-7\apollo>mvn clean package -Dmaven.test.skip=true -e -X > ddd3.txt maven打包命令!!!
maven打包命令:并且写入打包日志文件
D:\git\2021-7\apollo>mvn clean package -Dmaven.test.skip=true -e -X > bbb.txt
查看依赖命令:
D:\git\2021-7\myProject>gradle dependencies >> 1112.txt
排除掉依赖:
compile ('com.test.myProject:3.3.6-SNAPSHOT'){
exclude module:'autoMyTest-api'
exclude module:'apollo-client'
}
3.apollo-env.properties文件,实际上该文件没有生效。最终读取的是apollo db中的配置项。
local.meta=http://localhost:8080
dev.meta=http://xx:8080
fat.meta=http://yy:8080
uat.meta=http://zz:8080
lpt.meta=${lpt_meta}
pro.meta=http://dd:8080
4.修改apollo源代码,将代码中的配置地址写死,单独打包。
更改代码: ConfigServiceLocator.java 代码中直接写死:
/// 覆盖IP
for (int j = 0; j <services.size(); j++){
ServiceDTO serviceDTO = services.get(j);
if(serviceDTO != null) {
System.out.println("serviceDTO homepageUrl=" + serviceDTO.getHomepageUrl());
serviceDTO.setHomepageUrl("http://阿里云公网访问IP:8080/");
System.out.println("serviceDTO homepageUrl after=" + serviceDTO.getHomepageUrl());
servicesNew.add(serviceDTO);
}
}
//单独打包
compile('fakepath:apollo-core:0.13.3')
compile('fakepath:apollo-client:0.13.3')
//提交git需要恢复:(需要注意的点)
compile('com.ctrip.framework.apollo:apollo-client:0.11.0-SNAPSHOT')
compile('com.ctrip.framework.apollo:apollo-core:0.11.0-SNAPSHOT')
Apollo新建fat5作为本地的配置中心。(**解决方案**)
4.解决思路:DEBUG设置断点,增加输出日志来跟踪程序的运行。
DEBUG >> 发现了问题:不在apollo-env.properties文件中获取,没有生效。是单独从数据库中读取的,但是数据库中不能修改(阿里云局域网大家使用的),所以只能单独打包来访问(VPN办公环境)。
select * from ApolloConfigDB.ServerConfig;
Key | Cluster | Value | Comment
eureka.service.url | default | http://阿里云局域网访问IP:8080/eureka/ | Eureka服务Url,多个service以英文逗号分隔。