Kotlin Vert.x中Async Verticle与Composite Verticle的差异及运行机制咨询
Kotlin Vert.x AsyncVerticle与CompositeVerticle实现Hello World的运行机制及核心差异
一、Async协程版实现运行机制
实现代码:
var result = async { callFunctionAwait( getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker ) } var result1 = async { callFunctionAwait( getDependentAddress(HELLO_WORLD), message.headers(), message.body(), messageMarker ) } // 两个请求将并行执行 val res = result.await() val res1 = result1.await() message.reply(res.body, DeliveryOptions().setHeaders(res1.headers))
运行逻辑:
- 调用
async时会立即在当前Vert.x事件循环的协程上下文启动两个异步任务,两个callFunctionAwait调用会并行向目标EventBus地址发送请求,全程不会阻塞事件循环线程 - 后续分别调用
result.await()和result1.await()会挂起当前协程,直到两个任务都返回结果才继续执行回复逻辑 - 该实现没有内置异常处理逻辑,只要任意一个请求抛出异常,整个协程会直接终止,异常会向上层上下文传播
二、CompositeFuture版实现运行机制
实现代码:
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) }
运行逻辑:
callFunction直接返回Vert.x原生Future对象,两个Future创建后就会立刻开始执行请求,本身也是并行运行CompositeFuture.all(future1, future2)会把多个Future聚合成一个新的Future,只有所有输入Future都成功时聚合Future才会标记为成功,任意一个失败聚合Future就会标记为失败- 调用
await()挂起协程等待聚合Future完成后,主动判断结果状态,成功则取结果回复,失败则打印日志返回错误,异常处理逻辑显式可控
三、二者核心差异
- 底层依赖不同:前者依赖Kotlin协程标准库的并行能力,和Vert.x协程适配层绑定;后者依赖Vert.x原生的Future聚合能力,不依赖协程特性也可通过回调实现同等逻辑,适配场景更广
- 异常处理逻辑不同:前者没有内置异常捕获,任意任务失败会直接抛出异常终止协程,需要外层额外加try-catch才能做异常处理;后者会统一收集所有任务的执行结果,主动提供成功/失败分支判断,错误处理更符合Vert.x原生编程范式
- 扩展性不同:
CompositeFuture除了all(全部成功才算成功)之外,还提供any(任意一个成功就算成功)、join(等待所有任务完成不管成功失败)等多种聚合策略,可快速适配不同业务场景;协程async+await要实现类似逻辑需要额外编码处理 - 结果获取方式不同:前者可以直接拿到每个
async任务的返回结果,不需要额外调用取值方法;后者需要从原始Future对象中显式调用result()等方法才能获取执行结果
内容的提问来源于stack exchange,提问作者Piku
相关产品推荐
相关产品推荐

