导致CPU过高的VertX事件总线发布事件



我们使用API中的vertx.eventBus((.publish((方法进行GET、POST、PATCH和PUT调用。这种方法使用者只是将数据推送到缓存中[我们使用的是HazleCast缓存]。因此,这个消费者被所有的API(高度节流(调用

在perf测试下运行时,这会导致Vertx的线程延迟问题,我们注意到这一点,因为当时CPU也越来越高。这种情况持续几秒钟,然后一切恢复正常,过了一段时间又会发生。

经过调查,这种方法[即vertx发布事件的消费者方法]显示为瓶颈,并在这种间歇性峰值期间显示出最高的耗时方法。

在阅读了大量文档后,我发现如下所示。

在内部,Vert.x让Netty安排对使用者的另一个调用,直到当前调用(以及在Netty事件循环中提前安排的任何其他方法(完成,该调用才会运行。

你能建议一下吗,看起来vertx.eventBus((.publish方法不应该用于在同一个应用程序中使用它,这不是一个好方法。

这是发布方法实现的一个问题。Vertx发布方法遵循pub-sub模式。订阅者实现需要是非阻塞操作。这意味着订阅者需要使用vertx.executeBlocking处理程序将代码封装在内部,这样它就不会阻止来自发布者的线程。