设计要点:

  1. 任务函数注册方便,参考 http 函数注册
  2. 任务创建可以指定参数,比如重试次数,延迟执行,超时时间等
  3. 任务可以分队列,避免阻塞,比如高中低优先级
  4. 任务执行 worker 数量可以任意扩展
  5. 支持指定定时任务,定时任务的产生可以通过数据库生成,这样方便修改任务信息
  6. 相同定时任务可以指定不同定时时间,不同时区

因为业务上有定时任务的场景,之前思考如何使用 redis 达到上面的设计要点时,一直没想通怎么做,
直到看到 https://github.com/hibiken/asynq 的实现,没想到可以通过外部定时器发送定时任务的方式达到效果。


整体效果,如下图所示,

image