0

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-bWeb サービスを公開し、 localhost:8082 で開始しますservice-bservice-a

service-bservice-aNetflix 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、すべてのサービスが期待どおりに応答します。

がダウンしている場合は、フォールバックAppAFallbackを呼び出す必要がありapp-bます。ただし、発生するまでに約1分ほど待つ必要があります。

がダウンした直後app-b:

そして1分後app-bダウンです:

そして、これは私が期待した結果です。app-a/service-a直後の呼び出しapp-bがダウンしている理由について、タイムアウトが発生する理由について何か考えはありますか?

よろしくお願いします。

4

1 に答える 1

0

私は同じ問題を経験しましたが、(テストされていません) Eureka の更新頻度が問題の原因であると思います。app-b がダウンした直後でも、Eureka はまだ app-b がアップしていると考えています (まだハートビートをチェックしていません)。そして、app-b が 1 分間ダウンした後、Eureka の既知の app-b がダウンし、app-a に app-b がないことを伝えるだけなので、フォールバックがすぐに開始されます。

于 2016-08-08T11:38:06.683 に答える