kratos中集成定时任务介绍

项目地址

https://gitee.com/huoyingwhw/kratos-cron-task

碎碎念

定时任务项目是笔者从Python程序员转Golang做的第一个项目,记得当时项目没有用固定的框架,每个功能都是做的“缝合”,写法相对来说自由一些。

而且定时任务实现起来也相对自由一些,最简单的我们可以写好python脚本或者将打包好的go二进制文件放到服务器中使用linux的crontab定时服务定时执行脚本,如果项目中定时任务特别多也可以实现一个大型的定时任务的调度服务,比如github上就有很好用的开源的任务调度系统:
一个是Python写的airflow:https://github.com/apache/airflow

还有一个golang写的调度系统asynq:https://github.com/hibiken/asynq

现在做的Golang项目用的go-kratos这个开源项目,既然用到了框架我们在开发项目的时候最好遵循这个框架的开发规范,今天介绍一下如何在go-kratos这个开源项目中集成定时任务。

相关的issue

如何通过依赖注入 wire 后台作业?#916

kratos: task & job project layout #411

方法一 ***

我们知道,kratos项目分层如下:App -> Server(registry等) -> Service -> biz -> data,在初始化资源的时候通过依赖注入的方式按照从右往左的顺序初始化并且先初始化的资源会当成下一级资源的“参数”。

既然我们想要调用biz层的方法并使用data层的数据库与缓存的资源,我们可以像http与grpc的server那样再想办法初始化一个定时任务的server。

这样做还有一个好处,就是初始化定时任务的server实际上可以单独提出来,如果项目有基础包的话,可以放到基础包中,这样每个微服务都可以引用同一段封装好的代码且每个服务中代码初始化以及注册定时任务的写法都一致。

方法二 ***

实际上,这个作者封装的是asynq这个专门处理分布式任务队列的包并且强依赖Redis:https://github.com/hibiken/asynq

这种方案偏向于做一个统一的任务调度服务。

参考github上的一个lauout项目:https://github.com/go-cinch/layout

作者关于这个layout项目讲解的博客:https://go-cinch.github.io/docs/#/intro/1.dir

链路追踪结果

 

posted on 2023-07-10 15:31  江湖乄夜雨  阅读(606)  评论(0编辑  收藏  举报