我用Vertx写了一个服务。我的服务运行如下函数:
router.get("/report").handle(ServiceHandler::Count);我的Count函数需要很长时间(大约10到15分钟),这打破了Vertx的黄金法则。我是新手,我试过用谷歌搜索,但我找不到出路。
请帮帮我!非常感谢。
发布于 2020-02-10 21:16:52
在这种情况下,请使用blocking handler
router.get("/report").blockingHandler(ServiceHandler::Count);请注意,默认情况下,即使是工作线程也会受到阻塞线程检查器的监视。60秒后,会为被阻止的工作进程生成警告。
如果处理需要几分钟时间,请相应地调整setMaxWorkerExecuteTime和setMaxWorkerExecuteTimeUnit。
发布于 2020-02-14 18:34:41
如果处理时间超过1分钟,一般不应该让它从http-request通过router运行。
您的ServiceHandler::Count函数应该立即返回一条“流程已启动”消息,并使用一些长期运行的机制,如SockJS或good-ol电子邮件来通知用户完成。
https://stackoverflow.com/questions/60147933
复制相似问题