在Heroku上使用Play Framework的后台作业

问题描述:

在Heroku上,使用Play Framework,是否有必要设置后台作业处理器(使用Akka/RabbitMQ /等)来执行繁重的任务*?在Heroku上使用Play Framework的后台作业

我知道Play提供了在请求内异步执行任务的能力,但是这足以避免需要后台作业处理器吗?在非Heroku部署的独立Play应用中,异步功能可以在一个进程中完成所有功能,但在Heroku应用中,似乎还不够:根据Professional Heroku Programming(第254页,使用Ruby进行开发部分),在接收到请求和传递响应的时间之间,Web dyno被阻止,并且在此期间所有其他请求都排队。

如果需要后台作业处理器,是否有任何示例?我见过Play和Akka,Play和Heroku的例子,但不是所有三个在一起。 *(通过繁重的任务,我通常意味着需要答案的潜在长时间运行的任务,例如复杂的数据库查询或Web服务调用的结果赋予最终用户,而不是消防系统,忘记一些事情,如发送电子邮件)。

+0

在当前雪松(* .herokuapp.com)其中Play应用运行栈,[同时连接支持](https://devcenter.heroku.com/articles/http-routing#simultaneous-connections)。您提到的网页动态阻止仅在较旧的Bamboo堆栈上。 – ryanbrainard 2013-02-10 06:54:01

使用Play时,您不需要明确的工作人员。 Play 2的常见模式是在控制器中使用Async response,在较长时间运行的过程中使用Akka。 Play Framework网站上的所有示例都应该在Heroku上开箱即用。

+0

请问使用一个异步响应适合于该需要更长的时间超过30秒来完成(即,超时时间为web DYNO)任务? – kes 2013-02-28 02:41:39

+2

对不起,刚才看到你的回复。如果请求花费的时间超过30秒,那么你可以做几件事: *每隔20秒发送一次保持活动状态。这将保持连接在路由器层打开。 *使用队列并进行客户端轮询。我们使用Redis来实现这一点。我们立即用UUID回应的东西,在Redis的,返回一个202使用包含在客户端可以查询位置的Location头,然后当工作完成后,未来的更新Redis的,结果发回给客户端下一次民意调查。 – 2013-03-19 17:15:34

+0

谢谢。这很有帮助。 – kes 2013-03-21 14:13:51