2016-08-05 135 views
3

我正在使用帶有@EnableZuulProxy註釋的彈簧引導應用程序。但我想在運行時添加自定義路由。這怎麼可能?以編程方式向zuul代理添加新路由

現有文檔僅顯示靜態示例,其中路徑在application.yml中定義。你能指點我的代碼片段嗎?

ZuulConfiguration我發現添加路由routeLocator().getRoutes().add(route);的可能性,但它們不適用於運行時。我錯過了什麼?

非常感謝。乾杯

赫拉爾

+0

你好@Gerardo,你已經解決了這個問題嗎?謝謝 –

回答

0

我所做的是子類SimpleRouteLocator類用我自己的RouteLocator類。下面是我所做的例子:

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); 
     } 
    } 
} 

我不太確定的時候,因爲在我的實際代碼的ServiceWatcher被調用周圍Kubernetes WatcherServiceWatcher包裝(因爲我在OpenShift環境中運行Zuul)但是這應該提供如何入門的要點。

相關問題