2016-11-11 20 views
-1

垂直配置に成功しましたが、まだこのエラーがあります。結果は既に完了しています:成功。 、私はこれが私の配備クラスであるいくつかの説明が必要な理由を私は理解していない:verticleの展開に成功しましたが、このエラーが発生しました。結果は既に完了:成功

public class Deploy { 
private static Logger logger = LogManager.getLogger(Deploy.class); 

private static void deployAsynchronousVerticalByIndex(Vertx vertx, int indexCurrentDeploy, JsonArray verticalArray, Future<Void> startFuture, JsonObject jsonObjectConfig) { 
    JsonObject currentVertical = verticalArray.getJsonObject(indexCurrentDeploy); 
    currentVertical.forEach(entry -> { 
     logger.debug("Starting deploy of class: " + entry.getKey() + ", With the config: " + entry.getValue() + "."); 

     DeploymentOptions optionsDeploy = new DeploymentOptions().setConfig(jsonObjectConfig); 
     ObservableFuture<String> observable = RxHelper.observableFuture(); 
     vertx.deployVerticle(entry.getKey(), optionsDeploy, observable.toHandler()); 

     observable.subscribe(id -> { 
      logger.info("Class " + entry.getKey() + " deployed."); 
      if (indexCurrentDeploy + 1 < verticalArray.size()) { 
       deployAsynchronousVerticalByIndex(vertx, indexCurrentDeploy + 1, verticalArray, startFuture, jsonObjectConfig); 
      } else { 
       logger.info("ALL classes are deployed."); 
       startFuture.complete(); 
      } 
     }, err -> { 
      logger.error(err, err); 
      startFuture.fail(err.getMessage()); 
     }); 
    }); 
} 

public static void deployAsynchronousVertical(Vertx vertx, JsonArray verticalArray, Future<Void> startFuture, JsonObject jsonObjectConfig) { 
    deployAsynchronousVerticalByIndex(vertx, 0, verticalArray, startFuture, jsonObjectConfig); 
} 

}あなたがverticles間のあなたの未来を再利用し、そこに競合状態を持っているためだ

答えて

3

。それを修正する

最も簡単な方法は、次のようになります。

if (startFuture.isComplete()) { 
    startFuture.complete();  
} 

しかし、実際には唯一の問題を不明瞭にすること。

オブザーバブルをループから抽出して、実際にはすべての頂点に対して1回だけリッスンします。

JsonObject currentVertical = verticalArray.getJsonObject(indexCurrentDeploy); 
    ObservableFuture<String> observable = RxHelper.observableFuture(); 
    currentVertical.forEach(entry -> { 
    logger.debug("Starting deploy of class: " + entry.getKey() + ", With the config: " + entry.getValue() + "."); 

     DeploymentOptions optionsDeploy = new DeploymentOptions().setConfig(jsonObjectConfig); 

     vertx.deployVerticle(entry.getKey(), optionsDeploy, observable.toHandler()); 
    }); 

    observable.subscribe(id -> { 
     logger.info("Class " + id + " deployed."); 
     if (indexCurrentDeploy + 1 < verticalArray.size()) { 
      deployAsynchronousVerticalByIndex(vertx, indexCurrentDeploy + 1, verticalArray, startFuture, jsonObjectConfig); 
     } else { 
      logger.info("ALL classes are deployed."); 

      if (startFuture.isComplete()) { 
       startFuture.complete(); 
      } 
     } 
    }, err -> { 
     logger.error(err, err); 
     startFuture.fail(err.getMessage()); 
    }); 
+1

あなたの助けに感謝しています。私はvert.xを初めて使っています。これは完璧な答えです:) – OLH

関連する問題