2016-08-05 7 views
3

私は@EnableZuulProxyアノテーション付きのスプリングブートアプリケーションを使用しています。しかし、実行時にカスタムルートを追加したいと思います。これはどのように可能ですか?zuulプロキシにプログラムで新しいルートを追加する

既存のドキュメントには、経路がapplication.ymlで定義されている静的な例のみが示されています。私のユースケースのコードスニペットを教えてください。

ZuulConfigurationには、ルートrouteLocator().getRoutes().add(route);を追加する可能性がありますが、ランタイムには適用されません。私は何が欠けていますか?

ありがとうございます。乾杯

ヘラルド私は自分のRouteLocatorクラスでSimpleRouteLocatorクラスをサブクラス化してやった

+0

こんにちは@Gerardo、あなたはすでに問題を解決しましたか?ありがとう –

答えて

0

。ここで私が何をしたかのサンプルです:

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

(私はOpenShift環境でZuulを実行していますので)ServiceWatcherがKubernetes Watcher周りServiceWatcherラップ私の実際のコードであるため呼び出されるとき、私は正確にはわかりません、しかし、これは始める方法の要点を提供するはずです。