これはZuulFallbackProvider
で行うことができますが、まず以下のように設定する必要があります。
まず、Zuulのurl-routing - urlを直接指定します(zuul.routes.<service>.url
) - HystrixCommandでは実行されません。これを実現するには、以下のように構成を変更する必要があります。
zuul:
routes:
whatever:
path: /whatever/**
sensitiveHeaders: Cookie,Set-Cookie
serviceId: whatever
stripPrefix: false
ribbon:
eureka:
enabled: false
whatever:
ribbon:
listOfServers: http://server1:8080/
上記の設定では、ユーレカなしのリボンを使用しています。あなたはdetaisを見つけることができますhere
今、あなたのリクエストは、リボンを介してHystrixCommandで実行されます。したがって、独自のZuulFallbackProviderを提供することができます。
ZuulFallbackProviderでは、http://server2:8080/whateverApi2.
に以下のようにfallbackResponse
の方法でフォールバックリクエストを行うことができます。以下は非常に素朴な例です。 :-)あなたの目的のために以下の例を完成させる必要があります。
@Component
public class TestZuulFallbackProvider implements ZuulFallbackProvider{
@Override
public String getRoute() {
return "test";
}
@Override
public ClientHttpResponse fallbackResponse() {
ResponseEntity<String> response = new RestTemplate().exchange("http://server2:8080/whateverApi2", HttpMethod.GET, null, String.class);
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return response.getStatusCode();
}
@Override
public int getRawStatusCode() throws IOException {
return response.getStatusCodeValue();
}
@Override
public String getStatusText() throws IOException {
return response.getStatusCode().getReasonPhrase();
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream(response.getBody().getBytes("UTF-8"));
}
@Override
public HttpHeaders getHeaders() {
return response.getHeaders();
}
};
}
}
お返事ありがとうございます。私は解決策としてまだマークしません。単に「構成のみ」の代替案があるかどうかを確認するだけです。あなたのソリューションは、完全なSpring Cloudインフラストラクチャを使用する場合、RestTemplateの代わりにNetflix OSSコンポーネントの1つを使用しても使用します。 –
ついにこの問題に戻り、このアプローチを試みました。しかし、ZuulFallbackProviderは静的なフォールバックです。実際にリクエストをフォールバックサービスにリダイレクトするZuul、Ribbon、またはHystrixはありますか?サーバーが停止している場合に限り、最後の手段として実行する必要があるため、リボンサーバーリストに追加する必要はありません。 –
hystrixフォールバックを使用したくない場合は、独自の完全な 'route'または' post'フィルタを作ることが考えられます。フィルタでは、元の要求の結果を確認してから、適切なパラメータを使用して代替サーバーに要求を転送できます。 –