Was ich tat, war die SimpleRouteLocator
Klasse mit meiner eigenen RouteLocator
Klasse Unterklasse. Hier ist Probe von dem, was ich getan habe:
public class RouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {
@Autowired
private ZuulHandlerMapping zuulHandlerMapping;
private Map<String, ZuulRoute> routes = new ConcurrentHashMap<>();
public RouteLocator(TaskExecutor executor, String servletPath, ZuulProperties properties) {
super(serveletPath, properties);
executor.execute(new ServiceWatcher());
}
@Override
public Map<String, ZuulRoute> locateRoutes() {
return this.routes;
}
@Override void refresh() {
this.doRefresh();
}
private class ServiceWatcher implements Runnable {
@Override
public void run(){
// Add your routes to this.routes here.
ZuulRoute route1 = new ZuulRoute("/somePath", "http://someResourceUrl:8080");
ZuulRoute route2 = new ZuulRoute("/someOtherPath", "some-service-id");
routes.put("/somePath", route1);
routes.put("/someOtherPath", route2);
zuulHandlerMapping.setDirty(true);
}
}
}
Ich bin mir nicht ganz sicher, wenn die ServiceWatcher
da in meinem eigentlichen Code aufgerufen wird, der ServiceWatcher
umschlingt einen Kubernetes Watcher
(da ich Zuul in einer Umgebung Openshift leite), aber das sollte den Grundstein für den Einstieg geben.
Hallo @Gerardo, hast du das Problem schon gelöst? Vielen Dank –