如何生成在完成工作后将被取消部署的 Verticles
How to spawn verticles that will be undeployed after they've done their work
我目前正在开发我的第一个 vert.x 服务,但我对我的部署实施方式不太有信心。
我有几个verticles接受来自其他服务的请求,并将一堆工作委托给其他verticle。我如何才能旋转每个任务的 Verticle 并在工作完成后终止它,或者以编程方式将 Verticle 扩展到任务数量。
我目前在启动时生成 10 个 Verticle,并使用事件总线将这些任务分散到 Verticle 上。
主垂直
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))
}
}
Administration Verticle - 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
}
}
}
deployVerticle
将回调作为最后一个参数。此回调的结果是 deploymentId
:
vertx.deployVerticle("your.class", res -> {
if (res.succeeded()) {
String deploymentID = res.result();
...
}
}
理论上,您可以在 Verticle 完成任务后使用它取消部署。
实际上,我会保持它们的数量不变,并改为在容器级别上扩展。
我目前正在开发我的第一个 vert.x 服务,但我对我的部署实施方式不太有信心。
我有几个verticles接受来自其他服务的请求,并将一堆工作委托给其他verticle。我如何才能旋转每个任务的 Verticle 并在工作完成后终止它,或者以编程方式将 Verticle 扩展到任务数量。
我目前在启动时生成 10 个 Verticle,并使用事件总线将这些任务分散到 Verticle 上。
主垂直
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))
}
}
Administration Verticle - 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
}
}
}
deployVerticle
将回调作为最后一个参数。此回调的结果是 deploymentId
:
vertx.deployVerticle("your.class", res -> {
if (res.succeeded()) {
String deploymentID = res.result();
...
}
}
理论上,您可以在 Verticle 完成任务后使用它取消部署。
实际上,我会保持它们的数量不变,并改为在容器级别上扩展。