关于异步添加计划任务

bigman

目前的实现思路是 客户端用户 创建一个 计划任务后,webserver会异步请求 一个task服务,task服务器会直接
进行Timer::add操作,想问下这种实现方式可以吗?然后 task服务器如果设置1个进程数量 当 timer很多的时候会有问题吗?

735 1 0
1个回答

2548a

你就不用考虑代码异常或其它问题导致的退出问题吗?到时数据你都不知道去哪找回.如果你需要自己实现的话,下面是我给你建议.
第一,task服务定义一个容器,里面存储没执行的任务.
第二,webserver会异步请求一个task服务,这个时候task服务应该先存数据库,然后再添加到容器去.
第三,进程启动的时候,扫描数据库,获取未执行的任务,添加到容器里面去.
第四,进程启动的时候,添加一个一秒执行一次的定时器,里面代码循环定时器的任务,查找有没有到点或者过期还未执行的任务,有的话,调用相应逻辑,并更新数据库跟容器该任务执行状态.

  • bigman 2022-09-28

    谢谢 除了第4步,其它3步和我目前想的一致,主要是 考虑到如果使用timer的估计只能开一个进程,因为多个进程的话可能导致 timer_id 重复。如果是一个进程的话当timer很多的时候会不会有什么性能问题。还有个方案是考虑异步请求到task任务的时候让task创建多个 crontab 不知道哪个更加好点

  • bigman 2022-09-28

    看了下 crontab 其实就是timer 没什么区别

年代过于久远,无法发表回答
🔝