많은 노력 끝에 나는이 해결책을 생각해 냈습니다. 첫째, Netflix Archaius를 사용하여 속성 파일을 보았습니다.
public class ApplicationRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {
public ApplicationRouteLocator(String servletPath, ZuulProperties properties) {
super(servletPath, properties);
}
@Override
public void refresh() {
doRefresh();
}
}
이 인터페이스 RefreshableRouteLocator의 오버라이드 (override) 하나의 방법을 SimpleRouteLocator을 확장하고 호출하여 doRefresh() 메소드의 공개 다음과 같이 그럼 진행. 파일의 속성은 이벤트가 트리거 된 수정 된
@Configuration
@EnableConfigurationProperties({ ZuulProperties.class })
public class ZuulConfig {
public static ApplicationRouteLocator simpleRouteLocator;
@Autowired
private ZuulProperties zuulProperties;
@Autowired
private ServerProperties server;
@Bean
@Primary
public RouteLocator routeLocator() {
logger.info("zuulProperties are: {}", zuulProperties);
simpleRouteLocator = new ApplicationRouteLocator(this.server.getServletPrefix(),
this.zuulProperties);
ConfigurationManager.getConfigInstance().addConfigurationListener(configurationListener);
return simpleRouteLocator;
}
private ConfigurationListener configurationListener =
new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent ce) {
// zuulProperties.getRoutes() do something
// zuulProperties.getIgnoredPatterns() do something
simpleRouteLocator.refresh();
}
}
}
모든 시간과 ConfigurationEvent는 (하면 getPropertyName()와 getPropertyValue 처리 할 수 있었다 :
는 그럼 난 내 사용자 정의 구현에 빈 RouteLocator을 재정의()를 사용하여 이벤트에서 데이터를 추출하십시오. 필자도 ZuulProperties를 Autowired했기 때문에 그것에 접근 할 수있었습니다. 올바른 규칙으로 나는
zuul.ignoredPatterns
Zuul
의 속성을 따라 ZuulProperties에서의 값을 변경 수정되었는지 여부를 찾을 수 있습니다.
역동적으로 코드를 통해 ... 클라우드 설정을 사용하는 경우 zuul 속성에서 라우팅을 제거하고 액추에이터를 통해 새로 고침하면 라우팅이 수행되지 않습니다. 이는 내게 역동적 인 것입니다 ... –