В настоящее время я работаю над своим первым сервисом 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
}
}
}