我有两个用Kotlin Vert.x编写的Hello World句柄方法。如果可能的话,我想清楚地了解它们是如何工作的。一个是AsyncVertilce,另一个是compositevertile。
这个是Hello World协程异步垂直句柄方法。
var result = async {
callFunctionAwait(
getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker
)
}
var result1 = async {
callFunctionAwait(
getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker
)
}
// both requests are going to execute in parallel
val res = result.await()
val res1 = result1.await()
message.reply(res.body, DeliveryOptions().setHeaders(res1.headers))
}
这个是Hello World Coroutine Composite vertical
var future1 = callFunction(getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker)
var future2 = callFunction(getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker)
val result = CompositeFuture.all(future1, future2).await()
if (result.succeeded()) {
message.reply(future1.result().body, DeliveryOptions().setHeaders(future2.result().headers))
} else {
log.error(messageMarker, "Request failed with an exception ", result.cause())
message.fail(500, result.cause().message)
}
}
从文档
CompositeFuture.all()接受多个期货参数(最多6个)和当所有未来都成功时,返回一个成功的未来并且当至少一个期货失败时失败
一个主要的用例是当你想要全有或全无操作时;当你期望给定数量的期货有一个单一的结果时。
还有CompositeFuture
的其他变体,如CompositeFuture。any和CompositeFuture.join
async
执行期货的方式,将单独运行每个期货,其结果将与其他期货无关。