Netflix マイクロサービス API を使用してトレーニング アプリを構築しています。
これは、localhost:9999 から始まる私のエッジです。
@EnableHystrix
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class EdgeApplication {
public static void main(String[] args) {
SpringApplication.run(EdgeApplication.class, args);
}
}
次の 2 つのアプリを定義しました。
app-a
単純な Web サービスservice-a
を公開し、localhost:8081 で開始し
ますを呼び出すapp-b
Web サービスを公開し、 localhost:8082 で開始しますservice-b
service-a
service-b
service-a
Netflix Feign を使用した通話:
@FeignClient(value = "app-a", fallback = AppAFallback.class)
public interface AppAClient {
@RequestMapping(value = "service-a", method = RequestMethod.GET)
List<Entity> serviceA();
}
@Component
public class AppAFallback implements AppAClient {
private static final Entity DEFAULT_ENTITY = new Entity();
@Override
public List<Entity> serviceA() {
return Collections.singletonList(DEFAULT_ENTITY);
}
}
app-a
とが実行されている間app-b
、すべてのサービスが期待どおりに応答します。
- http://localhost:8081/service-a
- http://localhost:8082/service-b
- http://localhost:9999/app-a/service-a (エッジ経由)
- http://localhost:9999/app-b/service-b (エッジ経由)
がダウンしている場合は、フォールバックAppAFallback
を呼び出す必要がありapp-b
ます。ただし、発生するまでに約1分ほど待つ必要があります。
がダウンした直後app-b
:
- http://localhost:8081/service-aはうまく機能し、フォールバックが呼び出されます
- http://localhost:8082/service-bに到達できません
- http://localhost:9999/app-a/service-aタイムアウト:
HystrixRuntimeException: app-a timed-out and no fallback available.
- http://localhost:9999/app-b/service-bタイムアウト:
HystrixRuntimeException: app-b timed-out and no fallback available.
そして1分後app-b
ダウンです:
- http://localhost:8081/service-aはうまく機能し、フォールバックが呼び出されます
- http://localhost:8082/service-bに到達できません
- http://localhost:9999/app-a/service-aはうまく機能し、フォールバックが呼び出されます
- http://localhost:9999/app-b/service-b GENERAL : ロード バランサーにクライアント用のサーバーがありません:
app-b
そして、これは私が期待した結果です。app-a/service-a
直後の呼び出しapp-b
がダウンしている理由について、タイムアウトが発生する理由について何か考えはありますか?
よろしくお願いします。