【问题标题】:Playframework concurrent jobs managementPlayframework 并发作业管理
【发布时间】:2011-12-06 15:38:34
【问题描述】:

我想就多个并发作业管理提供一些建议:事实上,我在我的应用程序中使用了两个不同的作业:

  • 第一项工作很快:它尝试使用 WS.url() 方法访问两个不同的 url,并将结果状态记录到数据库中。 如果网站没有响应,则进行三次重试。此任务需要不到 20 秒的时间完成,并且将每 5 分钟运行一次。

  • 第二项工作很慢:如果记录到数据库中的状态正常,它会将内容解析到两个网站。此过程大约需要 2 分钟,并且将每小时完成一次。

我想确定如果一个作业正在运行,另一个作业不能被提升,并且要等待当前的结束才能开始。 我对锁的使用和并发访问非常陌生,所以每个建议对我来说都很宝贵!

【问题讨论】:

    标签: locking playframework jobs concurrency


    【解决方案1】:

    解决方案是在数据库(记录状态的位置)中保留一些标志,以便第二个作业检测它是否可以运行。现在,这将是一个解决方案,但在某些情况下可能会出现一些问题。

    鉴于两个作业都是链接的(一个“ping”一个 url,另一个解析它),第一个作业的执行速度非常快,(在您的给定场景中)第一个作业检索到的状态与任何人都无关除了第二份工作和每小时 12 次 ping 一个 url,当你每小时使用一次最新结果似乎浪费资源(在你的网站和你 ping 的网站上),我建议将这两个任务合并为一个工作。

    如果你有一份工作,你就不必再担心并发问题了。每小时运行一次。

    【讨论】:

    • 事实上,我们的目标是每周进行解析,并且“ping”经常足以在站点无法访问时做出反应并发送警报邮件。解析器还将使用来自 pinger 的访问信息。所以这两个工作是必要的。我暂时降低了测试的工作率......
    【解决方案2】:

    如果你想让它变得简单,你可以在第一个工作中开始第二个工作..

    您检查服务后的最后一行已启动

    new URLParserJob().now();
    

    【讨论】:

    • 感谢您的回答!由于每周只需要解析一次,因此每次 ping 都进行解析似乎是一种资源浪费。 ping 过程用于监视站点(并在必要时创建邮件警报)并打开解析器的方式。 pinger 必须是响应式的(例如每小时执行一次),并且解析器需要每周进行一次报告,因此它的频率应该是每周一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多