code: @Override
      public void start(Future<Void> startFuture) throws Exception {
          CountDownLatch latch = new CountDownLatch(servers.size());
          final boolean[] inError = {false};
          for (Server server : servers) {
              server.bind(ar -> {
                  if (ar.failed()) {
                      inError[0] = true;
                  }
                  latch.countDown();
              });
          }
          vertx.executeBlocking(f -> {
              try {
                  latch.await();
              } catch (InterruptedException e) {
                  // Ignore it.
              }
          }, ar -> {
              if (inError[0]) {
                  startFuture.fail("One of the server was not able to start correctly");
              } else {
                  startFuture.complete();
              }
          });
  
      }
docs: Start the verticle.<p>
  This is called by Vert.x when the verticle instance is deployed. Don't call it yourself.<p>
  If your verticle does things in it's startup which take some time then you can override this method
  and call the startFuture some time later when start up is complete.
  
  @param startFuture a future which should be called when verticle start-up is complete.
  @throws Exception