比在play框架中使用scala的timertask更好的解决方案

时间:2014-11-27 16:47:49

标签: scala playframework

我需要定期检查数据库以获取更新记录。我目前使用TimerTask工作正常。但是,我发现它的效率不高并且消耗了大量的服务器资源。有没有一种解决方案可以满足我的要求但更好?

def checknewmessages() = Action{
    request =>
       TimerTask(5000){
         //code to check database
       }
}

2 个答案:

答案 0 :(得分:0)

我可以想到两个解决方案:

  1. 您可以将ReactiveMongo驱动程序用于Play,它是Mongo DB中完全无阻塞和异步和上限的集合。
  2. 请看这个例子 - https://github.com/sgodbillon/reactivemongo-tailablecursor-demo How to listen for changes to a MongoDB collection?

    1. 如果您使用的数据库不支持推送机制,您可以通过定期将消息调度到自身来使用Actor来实现。

答案 1 :(得分:0)

如果你的逻辑在你的数据库(存储过程等)中,你可以简单地创建一个cron作业。

您还可以创建一个封装逻辑和计划的命令行脚本(cron再次)。

如果您的Web应用程序中有逻辑,则可以再次创建一个只对您的应用程序进行API调用的cron作业。