平时自己玩,阿波罗都是直接部署到本地或者虚拟机,一直都正常

 

知道有一天,我部署到阿里云

我去 配置竟然拿不到

需要说明的是我拿配置的方式:

直接上代码:

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
String someKey = "recordSlowSql";
String someDefaultValue = "";
String value = config.getProperty(someKey, someDefaultValue);
return value;

 

死活拿不到,但是,阿波罗确实是发布了

同样的一套数据库,本地部署可以拿到数据

 

然后使用restapi,也可以拿到

restapi:

http://阿里公网ip:8070/openapi/v1/envs/DEV/apps/test666/clusters/default/namespaces/application/items/recordSlowSql

返回数据

{

"key": "recordSlowSql",

"value": "yes",

"comment": "",

"dataChangeCreatedBy": "apollo",

"dataChangeLastModifiedBy": "apollo",

"dataChangeCreatedTime": "2020-07-16T11:03:48.000+0800",

"dataChangeLastModifiedTime": "2020-09-01T17:09:00.000+0800"

}

 

手足无措,呵呵 没办法 看日志吧

先看阿波罗的日志

apollo-adminservice无异常

apollo-configservice无异常

apollo-portal无异常

自己写的获取apollo数据的模块 一直有一个警告:

14:41:58 [Apollo-RemoteConfigLongPollService-1] WARN  c.c.f.a.i.RemoteConfigLongPollService - Long polling failed, will retry in 120 seconds. appId: bootdo, cluster: default, namespaces: application, long polling url: null, reason: Get config services failed from http://apollo.meta/services/config?appId=bootdo&ip=172.16.7.157 [Cause: Could not complete get operation [Cause: apollo.meta]]

 

注意标红的,这个是阿里云的局域网ip,而不是公网ip,

呵呵,感觉跟这个有关系,于是把获取阿波罗数据的模块也放到阿里云上,获取数据正常,呵呵,问题终于清晰定位到了

 到现在,问题很清晰了,就是阿里云的网络配置问题(说是我的问题也可以,嗯,对,我的问题),

另外还有一点:看eureka上的实例信息,点进去,全部是局域网

 

问题发现了,解决就好办了

方案1:

模块apollo-adminservice和模块apollo-configservice的eureka ip写成公网

例如:

eureka:
  instance:
    ip-address: 你的阿里云公网ip
    prefer-ip-address: true

方案2:

修改阿里云的配置文件(该方案目前为猜测,还未验证)

文件原来内容:

vim /etc/hosts

修改

将一长串的但是不是域名的iZ... 映射地址修改为公网即可

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐