2016-08-05 16 views
3

Ich verwende eine Spring-Boot-Anwendung mit @EnableZuulProxy Annotation. Aber ich möchte während der Laufzeit benutzerdefinierte Routen hinzufügen. Wie ist das möglich?Hinzufügen programmgesteuert neue Route zu zuul Proxy

Vorhandene Dokumentation zeigt nur statische Beispiele, in denen Routen in der application.yml definiert sind. Könnten Sie mich auf Code-Schnipsel meines Anwendungsfalls verweisen? In der ZuulConfiguration habe ich eine Möglichkeit gefunden, Routen routeLocator().getRoutes().add(route); hinzuzufügen, aber sie werden nicht auf die Laufzeit angewendet. Was vermisse ich?

Vielen Dank. Prost

Gerardo

+0

Hallo @Gerardo, hast du das Problem schon gelöst? Vielen Dank –

Antwort

0

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.