파싱 소스 코드를 제공하는 마이크로 Nacos 분배 센터 (b)

Nacos 구성 센터는 소스 코드를 구문 분석

소스 입구

ConfigFactory.createConfigService

ConfigService configService = NacosFactory. createConfigService ( 등록); 
문자열   내용 = configService. getConfig ( dataId, 의 groupId, 3000);

ConfigService에 의한 공장 건설

장식 MetricsHttpAgent 패키지 HTTP 요청, 모니터링을 증가

에 나타나 에이전트> HTTP 요청 clientWorker을 시작하는 프록시 방법 -> 특정 업무 관련

NacosConfigService.NacosConfigService

이. 에이전트 = 새로운 MetricsHttpAgent ( 새로운 ServerHttpAgent ( 등록)); 
이. 에이전트. 스타트();
이. 작업자 = 새로운 ClientWorker ( .이 에이전트 .이 configFilterChainManager, 등록);
  • 시작> HTTP 요청 - 기관은 httpAgent를 생성

  • 우리는 clientWorker-> 비동기 스레드 (cron 작업)을 생성

이. 집행자. scheduleWithFixedDelay ( 의 Runnable은 () { 
   공공 무효 실행 () {
       {시도
           . ClientWorker을 이. checkConfigInfo ();
      } 캐치 ( Throwable를 VAR2를) {
           . ClientWorker . LOGGER 오류 ( "[" + . 에이전트 getName () + "] [서브 -check] 체크 에러 "회전 VAR2를);
      }   } } 1L, 10L, TimeUnit와. MILLISECONDS);


얼마나 많은 요청 롱 폴링을 할까?

일괄 처리

공공 무효 checkConfigInfo () { 
   //分任务
   INT listenerSize = (( 지도) 이. cacheMap. 수 ()). 크기();
   //向上取整
   INT longingTaskCount = ( int)를 수학. CEIL (( 더블) listenerSize / ParamUtil. getPerTaskConfigSize ());
   경우 (( 더블) longingTaskCount > .이 currentLongingTaskCount) {
       위해 ( int로 I = ( int)를 이. currentLongingTaskCount; I < longingTaskCount; ++내가) {
           // 변화의 무질서한 과정이 문제가 될 수 있습니다 지금이 작업을 수행 할 작업 목록에 대해 생각해야 할 것인지 여부를 파악합니다
           . 다음은이 . ExecutorService를 실행] ( 새 새 . ClientWorker LongPollingRunnable ( 내가))
      } . 다음은이 currentLongingTaskCount = ( 더블) longingTaskCount;   } }

       


로컬 구성 확인 모니터 -> 

캐시 MD5 확인

업데이트 된 파일을 확인

ClientWorker.this.checkLocalConfig (cacheData); 
경우 (cacheData.isUseLocalConfigInfo ()) {
  cacheData.checkListenerMd5 ();
}

원격 확인

목록 < 문자열 > changedGroupKeys = ClientWorker. 이. checkUpdateDataIds ( cacheDatas, inInitializingCacheList); 
반복자 var16 = changedGroupKeys. 반복자 ();

의 groupId + dataId + 세입자 원격으로 확인

ClientWorker. 이. getServerConfig ( dataId, 기, 거주, 3000L);
무효화 checkListenerMd5 () { 
   반복자 VAR1를 = 이. 청취자. 반복자 () 동안 ( . VAR1 hasNext ()) { ManagerListenerWrap = ( ManagerListenerWrap) VAR1. 다음 것(); 만약 ( ! 이. MD5. 등호 ( 랩. lastCallMd5)) { 이. safeNotifyListener ( .이 dataId, 이. 닐기, 이. 함량 이. MD5, 랩);       }   } }

   
       
       
           



구성 가져 오기

원격 구성을로 이동하지 않을 경우, 현지에 가서 받기

내용 = LocalConfigInfoProcessor. getFailover ( .이 . 제 getName () dataId, 그룹 세입자); 
(만약 내용 ! = NULL) {
   CR. 의 setContent ( 콘텐츠);
} 다른 {
       내용 = 이. 노동자. getServerConfig ( dataId, 그룹 세입자 timeoutMs);
     
}

 

추천

출처www.cnblogs.com/java333/p/11306523.html