私はVertxウェブとKotlin言語の頂点を使用してWebサービスプロジェクトを作成しています。私がコールバック地獄に入るのを止めるためにVertx Syncに切り替えようとすると、私のコードのいくつかの部分が理由なしで2回以上実行されます。古いコールバック構造を使用する場合、そのような問題はありません。これはいくつかのサンプルコードです: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
})
「PersisLayer」行を置くとすぐ次の行が複数回実行されます。この行を省略すると、次の行が1回実行されます。ここで
はPersistLayerコードです:
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の間に何かがあるかもしれません。私はこれを1日か2日後に再現しようとします。 –