1

을 주석으로 여러 인스턴스 새로 고침/적용 . 다음으로내가 검색 serivce/부하 분산 장치로 <strong>넷플릭스 유레카</strong>에 의해 <strong>중추적 인 클라우드 파운드리</strong>에 배포 노출 <strong>봄 구성</strong>를 사용 <strong>봄 부팅</strong> 응용 프로그램을, 쓰고 있어요 @refreshScope

내가 빈을 만들었다 :

@Component 
@ConfigurationProperties("config") 
@RefreshScope 
@Data 
public class GeneralProperties { 
    private boolean ignoreEvent; 
} 

유레카 구성 저장소의 실제 특성을 변경 한 후에 /refresh 노광하는 프로그램 경로이었다 @refreshScope 의해 주석 값 호출 변경됨 (응답 상태 필드 종료), 이는 올바르게 작동 함을 의미합니다.

클라우드에서 동일한 애플리케이션의 여러 인스턴스를 실행하고 /refresh (으)로 전화를 걸면 문제가 시작됩니다.
사용되는 루트는 유레카에 의해 노출 된 루트입니다. 유레카는로드 밸런서를 사용하여 호출을 사용 가능한 인스턴스 중 하나로 라우팅합니다.

예기치 않은 결과로 인해 모든 인스턴스가 속성의 최신 변경 사항으로 업데이트되지 않습니다.

모든 인스턴스에 변경 사항을 적용하는 방법은 무엇입니까?

답변

1

그런 경우에는 Spring Cloud Bus를 사용해야합니다. 이 프레임 워크의 배경은 모든 애플리케이션 인스턴스를 메시지 브로커 (RabbitMQ 또는 Apache Kafka)의 주제에 바인딩하는 것입니다.

은 pom.xml 파일에 다음 종속성을 추가

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-bus-parent</artifactId> 
      <version>1.3.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-bus-amqp</artifactId> 
    </dependency> 
</dependencies> 

을 내가 RabbitMQ입니다 AMQP에 대한 종속성을 추가 한 위의 예에서. 또한 응용 프로그램을 RabbitMQ에 바인딩해야합니다. PCF에서는 플랫폼에 내장되어 있기 때문에 쉽습니다. 당신이 새로해야하는 경우

, 당신은 호출해야합니다

POST /bus/refresh 

이 응용 프로그램의 모든 인스턴스가 듣고 있다는 주제로 이벤트를 트리거 것, 그 결과 - 모든 인스턴스는 콩을 새로 것이다 구성.

행운을 비네.