저는 Kotlin 언어로 Vertx 웹과 verticle을 사용하여 웹 서비스 프로젝트를 작성하고 있습니다. 콜 아웃 지옥에 들어가기를 막기 위해 Vertx Sync로 전환하려고 할 때, 내 코드의 일부분이 이유없이 두 번 이상 실행됩니다. 이전 콜백 구조를 사용할 때 그런 문제는 없습니다. 최대한 빨리 다음 줄이 여러 번 실행 "PersisLayer"라인을 넣어Vertx Sync 코드가 여러 번 실행됩니다.
router.post("/layers").handler(fiberHandler { routingContext ->
val request = routingContext.request()
val response = request.response()
response.putHeader("content-type", "application/json")
val layer = gson.fromJson<Layer>(routingContext.bodyAsString, Layer::class.java)
val layerResult = awaitResult<Message<UUID>> { vert.eventBus().send("PersistLayer", layer, it) }
val viewResult = awaitResult<Message<Long>> { vert.eventBus().send("CreateView", layerResult.body(), it) }
response.isChunked = true
response.write(gson.toJson(viewResult.body()))
response.statusCode = 201
})
: 이것은 몇 가지 예제 코드입니다. 이 줄을 생략하면 다음 줄이 한 번 실행됩니다. 내가 재현하고 문제를 해결하기 위해 관리 생각
vert.eventBus().consumer<Layer>("PersistLayer").handler {
val layer = it.body()
layer.sid = Generators.timeBasedGenerator().generate()
entityManager.apply {
transaction.begin()
persist(layer)
transaction.commit()
}
it.reply(layer.sid)
}
문제는이 부분이 아니지만 "PersistLayer"리스너에서 수행하는 작업과 관련이 있습니다. 너도 그걸 올리시겠습니까? –
@AlexeySoshin 그러나 PersistLayer 코드는 너무 간단해서 문제가되지 않습니다. 코드를 추가했습니다. – Kamyar
감사. 한눈에 코드가 잘 보입니다. 아마도 Quasar-> VertX Sync-> Kotlin 사이에 무언가가있을 수 있습니다. 나는 이것을 하루나 이틀에 재현하려고 노력할 것입니다. –