HTTP 게이트웨이가 마이크로서비스들과 통신하려고 Client 클래스를 참조합니다(➊). HTTP 게이트웨이를 Distributor에 등록하는 패킷을 구성합니다(➋). 이때 임의의 이름인 gate로 설정했습니다.
Distributor 접속용 Client 클래스의 인스턴스를 생성합니다(➌). Distributor와 HTTP 게이트웨이는 물리적으로 다른 장비에서 실행하는 것이 좋지만, 개발 편의상 로컬에서 Distributor, HTTP 게이트웨이, 마이크로서비스 모두 실행하도록 하겠습니다.
Distributor에 접속하면 isConnectedDistributor를 true로 설정하고➋에서 만들어 놓은 패킷을 전달합니다(➍). Distributor에서 정보가 전달되면 onDistribute 함수에서 처리하도록 하고(➎), 접속을 종료하거나 에러가 발생하면 isConnectedDistributor를 false로 변경합니다(➏, ➐).
HTTP 게이트웨이를 Distributor보다 먼저 실행하거나 Distributor가 실행을 중단하면 재접속 기능을 추가합니다. 3초 간격으로 isConnectedDistributor 값이 false이면 Distributor로 접속을 시도합니다(➑).
onDistribute로 Distributor에서 현재 접속 가능한 마이크로서비스 목록이 전달되면(➒) 접속하지 않은 마이크로서비스에 대해 Client 클래스 인스턴스를 생성합니다. 접속 주소로 key를 만들어 mapClients에 인스턴스를 저장하고(➓), 처리 가능한 URL들을 mapUrls에 저장합니다(⓫).
마이크로서비스가 장애 등으로 접속을 종료하면➓, ⓫에서 등록한 정보를 삭제합니다(⓬).