私は2つのAWS Beanstalk envを作成しました。それぞれに独自のバージョンのアプリケーションがあります。これらのURLのURLはhttps://beta.myserver.com/v1073とhttps://beta.myserver.com/v1084です。これらのURLは、ロードバランサを指します。Spring Cloudでプログラム的にルートを設定するNetflix Zuul
私は以下の設定を持つZuulの実装もあります。
zuul:
routes:
beta:
path: /api/**
serviceId: beta-root
strip-prefix: false
sensitive-headers: Cookie,Set-Cookie
ribbon:
eureka:
enabled: false
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
beta-root:
ribbon:
listOfServers: https://beta.myserver.com
私のアプリケーションのリクエストにはバージョンヘッダーが必要です。私はこのヘッダ値を検査するZuul "pre"フィルタを持っています。目標はヘッダー値に基づいて要求をルーティングすることです。
リクエストを傍受できましたが、フィルタからルーティングできませんでした。コードスニペットは次のとおりです。コードを実行した後、要求はまだhttps://beta.myserver.com/api/ ...
@Override
public Object run() {
/* Logic to get version header etc */
/* Set the new route */
Map<String, ZuulRoute> routes = zuulProps.getRoutes();
ZuulRoute currentRoute = routes.get("beta-root");
currentRoute.setLocation("https://beta.myserver.com/v1073");
/* Refresh the route */
routeLocator.getRoutes();
logger.warn("Current Route:" + currentRoute.getLocation());
return null;
}
にこの問題を解決する方法の任意の提案を行くことにしようか?
ありがとう@ yonsung.yoon。私たちは今envを設定しています。テストの後に私はさらにコメントを追加します – bostonjava
上記のアプローチを試しました。それはうまくいくだろうが、私の解決策は変わった。私たちはBeanStalkを使用しており、各バージョンは不変のインスタンスにデプロイされているため、同じサーバーに2つのコンテキストを持つ代わりに、アプリケーションのバージョンが異なる2つのサーバーがあります。たとえば、https://beta.v1.myserver.comおよびhttps://beta.v2.myserver.comです。コード内でserviceIdが指し示す場所を更新するにはどうすればよいですか? – bostonjava
@ yongsung.yoon答えを見つけましたか?我々は同様の問題があります。私たちはリダイレクトする必要のあるヘッダ値に基づいてbrand1.server.comとbrand2.server.comを持っています。しかし、再び特定の要求のみ。グローバルではありません –