#kotlin #vert.x #kotlin-coroutines
#kotlin #vert.x #kotlin-сопрограммы
Вопрос:
У меня есть следующий код, который будет запускать http-сервер:
class MainVerticle : CoroutineVerticle() {
override suspend fun start() {
val server = vertx.createHttpServer()
val router = Router.router(vertx)
router.route("/api/genders*")
.subRouter(GenderApi(vertx).create())
server.requestHandler(router)
.listen(8080)
.await()
}
}
Теперь я хотел бы вывести, был ли сервер успешно запущен или произошел сбой (в случае, если порт уже занят).
Без сопрограммы коды будут:
class MainVerticle : AbstractVerticle() {
override fun start(startPromise: Promise<Void>) {
val server = vertx.createHttpServer()
val router = Router.router(vertx)
server.requestHandler(router).listen(8888) { http ->
if (http.succeeded()) {
startPromise.complete()
println("HTTP server started on port 8888")
} else {
println(http.cause())
startPromise.fail(http.cause());
}
}
}
}
Здесь я делаю вывод, если сервер был запущен успешно или нет.
Ответ №1:
Если вы используете сопрограммы, добавьте блок try / catch:
class MainVerticle : CoroutineVerticle() {
override suspend fun start() {
val server = vertx.createHttpServer()
val router = Router.router(vertx)
router.route("/api/genders*")
.subRouter(GenderApi(vertx).create())
try {
server.requestHandler(router)
.listen(8080)
.await()
println("HTTP server started on port 8888")
} catch (e: Exception) {
println(http.cause())
throw e
}
}
}