您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Spring Zuul:动态禁用通往服务的路由

Spring Zuul:动态禁用通往服务的路由

经过大量的努力,我想到了这个解决方案。首先,我使用Netflix Archaius观看属性文件。然后我进行如下操作:

public class ApplicationRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {

public ApplicationRouteLocator(String servletPath, ZuulProperties properties) {
    super(servletPath, properties );
}


@Override
public void refresh() {
   doRefresh();
}
}

通过扩展SimpleRouteLocator并在接口RefreshableRouteLocator的重写之一中调用doRefresh()方法来使其公开。

然后,使用自定义实现重新定义bean RouteLocator:

@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()从事件中提取数据)。由于我还自动为ZuulProperties布线,因此可以访问它。遵循正确的规则,我可以找到Zuul的财产

zuul.ignoredPatterns

进行了相应的更改,从而更改了ZuulProperties中的值。

Java 2022/1/1 18:18:29 有511人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶