class LongPollingRunnable implements Runnable{
private final int taskId;
public LongPollingRunnable(int taskId){
this.taskId = taskId;
}
@Override
public void run(){
List<CacheData> cacheDatas = new ArrayList<CacheData>();
List<String> inInitializingCacheList = new ArrayList<String>();
try{
for(CacheData cacheData : cacheMap.get().values()){}{
if(cacheData.getTaskId() == taskId){
cacheDatas.add(cacheData);
try{
checkLocalConfig(cacheData);
if(cacheData.isUseLocalConfigInfo()){
cacheData.checkListenerMD5();
}
}catch(Exception e){LOGGER.error("get local config info error",e)}
}
}
}
}
//校验出变更的dataId列表
List<String> changedGroupKeys = checkUpdateDataIds(cacheDatas,initializingCacheList);
if(!CollectionUtils.isEmpty(changedGroupKeys)){
LOGGER.info("get changedGroupKeys:"+changedGroupKeys);
}
for(String groupKey:changedGroupKeys){
String[] key = GroupKey.parseKey(groupKey);
String dataId = key[0];
String group = key[1];
String tenant = null;
if(key.length == 3){
tenant = key[2];
}
try{
//从配置中心获取最新的配置信息
String[] ct = getServerConfig(dataId,group,tenant,3000L);
CacheData cache = cacheMap.get().get(GroupKey.getKeyTenant(dataId,group,tenant));
cache.setContent(ct[0]);
if(null != ct[1]){
cache.setType(ct[1]);
}
LOGGER.info("...");
}catch(NacosException ioe){
...
}
}
//遍历缓存,通知注册监听器
for(cacheData cacheData: cacheDatas){
if(!cacheData.isInitializing()||inInitializingCacheList.contains(GroupKey.getKeyTenant(cacheData.dataId,cacheData.group,cacheData.tenant))){
cacheData.checkListenerMD5();
cacheData.setInitializing(false);
}
}
inInitializingCacheList.clear();
executorService.execute(this);
}
09-13
347
09-19
1221
09-15
246
09-17
992
09-14
1136