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

我正在尝试在运行时禁用到Eureka注册的微服务的Zuul路由(我正在使用Spring Boot)。

这是一个例子:

localhost/hello

localhost/world

这两个是已注册的微服务。我想在运行时禁用到其中一个的路由而不关闭它。

有没有办法做到这一点?

谢谢,

奈米

回答:

经过大量的努力,我想到了这个解决方案。首先,我使用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中的值。

以上是 Spring Zuul:动态禁用通往服务的路由 的全部内容, 来源链接: utcz.com/qa/408377.html

回到顶部