我的项目使用playframework,并且每5分钟运行一次计划任务。当只有一个应用程序时,它可以正常工作。
但是,当我使用nginx配置2个play应用程序时。这两个播放应用程序都运行预定的任务。
如何仅在这两个Play应用程序中运行一项预定任务?
答案 0 :(得分:0)
我看到了针对该问题的三种解决方案:
使用外部服务进行计划(如cron选项卡)。每5分钟,外部服务就会调用您应用程序的一个专用终结点,然后一个应用程序将运行任务
使用外部数据库(例如sql数据库,zookeeper ...)来获得分布式锁,在该分布式锁中,只有一个应用程序可以在给定时间获得该锁。当另一个尝试获取锁来运行任务时,由于已获取了锁,因此该任务被中止。
使用akka群集功能来创建分布式调度程序。为此,您可以使用分片功能,以便只有一个节点可以处理作业消息。
根据您已经在使用的内容,前两种解决方案可能更易于实现。使用Akka,您可能需要投入很多新知识来实现此目标。