0

我们正在使用 API 中的 vertx.eventBus().publish() 方法进行 GET 、 POST 、 PATCH 、 PUT 调用。这种方法消费者只是将数据推送到缓存[我们正在使用 HazleCast 缓存]。所以这个消费者被所有的API调用[高度限制]

在 perf testing 下运行它时,这会导致 Vertx 出现线程延迟问题,我们注意到这一点,因为当时 CPU 也越来越高。这会发生几秒钟,然后一切都恢复正常状态,然后在一段时间后再次发生。

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

阅读大量文档后,我发现如下。

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

您能否就此提出建议,看起来 vertx.eventBus().publish 方法不应该用于在同一应用程序中使用它,这不是一个好方法。

4

1 回答 1

0

事实证明,这是发布方法的实现问题。Vertx 发布方法遵循发布-订阅模式。订阅者实现需要是非阻塞操作。这意味着订阅者需要使用 vertx.executeBlocking 处理程序将代码包装在里面,因此它不会阻止发布者的线程。

于 2020-08-22T18:18:22.777 回答