Как создавать статьи, которые будут отменены после выполнения своей работы - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я работаю над своим первым сервисом vert.x, и я не очень уверен в том, как реализовано мое развертывание.

У меня есть несколько вершин, чтобы принимать запросы от других служб и делегировать куча работы по другим статьям. Как я могу либо раскрутить вертикаль каждой задачи и убить ее после выполнения работы, либо программно масштабировать вертикали для увеличения числа задач.

В настоящее время я запускаю десять вершин при запуске и распространяю эти задачи. поверх вершин, используя шину событий.

Основная вертикал

class MainVerticle : CoroutineVerticle() {

  private val databaseConfig by lazy { config.getJsonObject("migration") }

  override suspend fun start() {
    vertx.deployVerticle(AdministrationVerticle::class.java, DeploymentOptions().setConfig(config))
    vertx.deployVerticle(UpdateVerticle::class.java, DeploymentOptions().setConfig(config))
  }
}

Административная вертикаль - обработчик HTTP

private suspend fun handleRolloutRequest(ctx: RoutingContext) {
  val version = ctx.request().getParam("version")?.toInt() ?: findLatestVersion()
  val systems = findOutdatedSystems(version)

  for (system in systems) {
    vertx.eventBus().send("rollout", system.id, options)
  }

  ctx.response().end()
}

Обновление вертикали

override suspend fun start() {
  client.connectAwait(mqttServerConfig.getInteger("port"), mqttServerConfig.getString("hostname"))

  vertx.eventBus().consumer<String>("rollout") {
    launch(vertx.dispatcher()) {
      // actual rollout
    }
  }
}

1 Ответ

1 голос
/ 28 февраля 2020

deployVerticle принимает обратный вызов в качестве последнего аргумента. Результатом этого обратного вызова является deploymentId:

vertx.deployVerticle("your.class", res -> {
    if (res.succeeded()) {
        String deploymentID = res.result();
        ...
    }
}

Теоретически, вы можете использовать это для отмены ваших вертиклей после того, как они выполнили свои задачи.

Практически, я бы оставил их постоянное количество и вместо этого масштабировал бы их на уровне контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...