我的服务中有一个顶点,它接收http请求并使用executeBlocking与MySQL数据库对话。我正在使用命名工作池与数据库进行交互。现在,为了推送应用程序指标(使用正在阻止的库),我想使用其他命名的工作池。因为我不希望数据库操作因指标而中断,所以我想拥有一个单独的工作池。 我可以使用事件总线,并使用工作程序垂直目录来推送指标,但是由于转换到JsonObject会产生开销,因此我想从同一垂直目录使用executeBlocking自身。
如此处所述https://groups.google.com/d/msg/vertx/eSf3AQagGGU/9m8RizIJeNQJ ,这两种情况下使用的工作池是相同的。因此,制作一个新的工作线程将真正帮助我解耦用于数据库操作的线程和用于推送指标的线程。
任何人都可以帮助我提供更好的设计选择,或者如果我使用相同的Verticle,如何使用其他工作池?
答案 0 :(得分:3)
尝试以下代码(用Kotlin编写,但您明白了):
val workerExecutor1 = vertx.createSharedWorkerExecutor("executor1", 4)
val workerExecutor2 = vertx.createSharedWorkerExecutor("executor2", 4)
workerExecutor1.executeBlocking(...) // execute your db code here
workerExecutor2.executeBlocking(...) // execute your metrics code here
别忘了在不需要workerExecutor时将其关闭:
workerExecutor1.close()