我有一个奇怪的问题。
我正在进行一些屏幕抓取,然后将数据呈现给我的用户进行一些选择。我对我正在使用的网站没有任何控制权,我需要他们首先执行他们的Javascript。
这个过程在本地工作正常,只需要一分钟就可以完成所有事情。但是当我推送到Heroku时,请求在30秒后超时,虽然我可以看到日志,但实际处理仍在继续。
您能推荐其中一种解决方案,还是其他替代方案:
代码:
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
WebClient webClient = new WebClient();
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.waitForBackgroundJavaScript(20000);
Page page = webClient.getPage(url);
WebResponse response = page.getWebResponse();
String html = response.getContentAsString();
答案 0 :(得分:0)
运行长时间运行的进程的正确方法是使用异步工作程序。即使是需要5秒钟的进程也会锁定您的Web工作者一段时间(假设您正在运行同步工作程序),因此将这些任务委派给异步工作人员总是明智的。
按照本指南开始使用:https://devcenter.heroku.com/articles/asynchronous-web-worker-model-using-rabbitmq-in-java