Spring Cloud Config Server 그 레이스 케 일 발표

1. 그 레이스 케 일 발표
그 레이스 케 일 발표 란 특정한 서비스 에 여러 개의 인 스 턴 스 가 존재 할 때 서비스 설정 정 보 를 수정 한 후에 그 중의 하나 또는 몇 개의 인 스 턴 스 로 설정 을 업데이트 시 키 려 고 합 니 다. 모든 인 스 턴 스 가 설정 을 업데이트 하 는 것 이 아 닙 니 다.
2. 실현 방식
장면 1 (흔 하지 않 음): 여러 개의 인 스 턴 스 가 같은 기계 에 배치 되면
같은 기계 이기 때문에 같은 인 스 턴 스 의 포트 가 다 를 수 밖 에 없습니다. 이 때 destination = 응용 이름: 포트 번호 형식 으로 그 레이스 케 일 을 발표 할 수 있 습 니 다.
destination 의 값 (즉, 응용 이름: 포트 번호, 다른 형식 일 수도 있 습 니 다) 은 applicationContextId 에 대응 합 니 다. 그 다음 에 applicationContextId 가 어떻게 가 져 왔 는 지 설명 합 니 다.
예 를 들 면:
curl -X POST "http://localhost:8050/bus/refresh?destination=appName:8801"
curl -X POST "http://localhost:8050/bus/refresh?destination=appName:8802"
장면 2: 여러 개의 인 스 턴 스 가 서로 다른 기계 에 배치 되면
서로 다른 기계 에서 관 리 를 편리 하 게 하기 위해 여러 개의 인 스 턴 스 의 응용 이름, 포트 번 호 는 보통 같 습 니 다. 그러면 장면 1 의 방식 으로 그 레이스 케 일 을 발표 할 수 없습니다. 어떤 인 스 턴 스 를 발표 해 야 하 는 지 확인 할 수 있 는 유일한 요소 가 없 기 때문에 서로 다른 기계 의 ip 이 유일한 것 이 라 고 생각 할 수 있 습 니 다. 이것 이 바로 착안점 입 니 다!
org. springframework. boot. context. context IdApplication ContextInitializer 류 에는 다음 과 같은 코드 가 있 습 니 다.
private String getApplicationId(ConfigurableEnvironment environment) {
    String name = environment.resolvePlaceholders(this.name);
    String index = environment.resolvePlaceholders("${vcap.application.instance_index:${spring.application.index:${server.port:${PORT:null}}}}");
    String profiles = StringUtils.arrayToCommaDelimitedString(environment.getActiveProfiles());
    if (StringUtils.hasText(profiles)) {
        name = name + ":" + profiles;
    }

    if (!"null".equals(index)) {
        name = name + ":" + index;
    }

    return name;
}

applicationContextId 는 name: profiles: index 로 구 성 된 것 임 을 알 수 있 습 니 다. 그 중에서 name 의 표현 식 은 ${spring. application. name: ${vcap. application. name: ${spring. config. name: application}} 입 니 다. 이 표현 식 은 spring. application. name 매개 변수 가 값 이 있 으 면 사용 하고 뒤의 것 은 일치 하지 않 습 니 다.값 이 없 으 면 뒤에 있 는 것 과 계속 일치 합 니 다.index 의 표현 식 은 ${vcap. application. intance index: ${spring. application. index: ${server. port: ${PORT: null}}} 입 니 다. 같은 이치 로 다른 설정 항목 이 설정 되 어 있 지 않 으 면 기본 값 은 server. port 입 니 다. 따라서 일반적으로 기본 값 은 ${spring. application. name}: ${server. port} 입 니 다.
위 에서 언급 한 바 와 같이 서로 다른 기계 ip 의 서로 다른 특징 을 이용 하여 그 레이스 케 일 을 개조 할 수 있다 면 server. port 와 일치 하 는 sping. application. index 매개 변 수 를 설정 할 수 있 습 니 다. 모든 인 스 턴 스 를 추가 할 수 있 습 니 다: sping. application. index = ${spring. cloud. client. ipAddress}: ${server. port} 설정, 그러면 구 성 된 applicationContextId 는 ${spring. application. name} 입 니 다. ${spring. application. index}, 즉 응용 이름: 인 스 턴 스 ip: 인 스 턴 스 port, 이런 방식 은 장면 2 뿐만 아니 라 장면 1 에 도 적용 된다.
예 를 들 면:
curl -X POST "http://localhost:8050/bus/refresh?destination=appName:192.168.1.250:8801"
curl -X POST "http://localhost:8050/bus/refresh?destination=appName:192.168.1.250:8802"
curl -X POST "http://localhost:8050/bus/refresh?destination=appName:192.168.1.251:8801"

좋은 웹페이지 즐겨찾기