携程阿波罗部署到阿里云上遇到的坑
平时自己玩,阿波罗都是直接部署到本地或者虚拟机,一直都正常知道有一天,我部署到阿里云我去 配置竟然拿不到需要说明的是我拿配置的方式:直接上代码:Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never nullString someKey
平时自己玩,阿波罗都是直接部署到本地或者虚拟机,一直都正常
知道有一天,我部署到阿里云
我去 配置竟然拿不到
需要说明的是我拿配置的方式:
直接上代码:
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:
返回数据
{
"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... 映射地址修改为公网即可
更多推荐
所有评论(0)