golang开源定时任务调度框架
golang开源定时任务调度框架
Go语言中有很多开源的定时任务调度框架,以下几个是比较流行常用的:
golang开源定时任务框架介绍
- cron
一个基于Cron表达式的定时任务库,可以精确到秒级。它提供了简单易用的API来定义和管理定时任务,支持任务暂停、恢复、删除等操作,同时还能够在多个节点之间共享状态信息。
目前在github中的star最多,最为流行。
官方网站地址:https://github.com/robfig/cron
- go-crontab
一个轻量级的定时调度库,也是基于Cron表达式的。它支持多种调度方式,包括分布式调度、集群调度,同时还提供了Web控制台和RESTful API接口,非常方便使用。
一个定时任务管理器,基于Go语言和beego框架开发。用于统一管理项目中的定时任务,提供可视化配置界面、执行日志记录、邮件通知等功能,无需依赖*unix下的crontab服务。
官方网站地址:https://github.com/lisijie/webcron
- jobrunner
一个简单易用的定时任务库,它支持按照时间周期或按照固定时间点执行任务。除此之外,还支持异步任务、任务重试、延迟任务等功能。
官方网站地址:https://github.com/bamzi/jobrunner
- gocron
另一个基于Cron表达式的定时任务库,它可以让你以链式调用的方式定义任务,并且支持任务组、任务优先级等功能。
官方网站地址:https://github.com/go-co-op/gocron
总之,这些库使用起来都比较简单,你可以根据自己的需求和喜好选择其中一个来使用。因为每个定时框架都有其自身的优点和适用场景。以下是每个框架的一些特点仅供参考:
golang开源定时任务框架对比
-
cron
目前在github中的star最多,得到广泛的使用和测试。评测结果表明,与其他相比,它拥有最高的调度准确性,尤其在较高负载下。它也有宽松的开源许可证,允许你做任何你想做的事情。 -
go-crontab
基于Go语言和beego框架开发,可以运行多个实例(master/扇脸ave)并支持分布式部署。易于集成,并提供了控制台和API接口。在Go语言中编写,易于维护和扩展。 -
jobrunner
拥有丰富的功能,包括异步任务、任务重试、延迟任务等。具有充分的单元测试和文档支持。代码简单而直观。 -
gocron
支持链式调用,非常易于使用。可以定义任务组、任务优先级等。在调度方面表现良好,但没有经过广泛测试。
总结:因此,选择哪个库主要取决于您的需求和偏好。如果你需要更高的调度准确性和稳定性,那么cron可能是一个不错的选择;
如果你需要分布式调度和控制台支持,那么go-crontab可能更适合你。而如果你需要更多的功能和灵活性,那么jobrunner可能更适合你。
我目前选择的是:cron,因为在github中的star最多,最为流行,能得到广泛的使用和测试,而且它的性能比较好。
cron使用
官方地址:https://github.com/robfig/cron
下载依赖包
go get github.com/robfig/cron/v3@v3.0.0
cron的封装如下示例:
import "github.com/robfig/cron/v3"var C *cron.Cron
// 记录启动的任务EntryId
var TaskEntryIdMap map[string]cron.EntryIDfunc TaskInit() {TaskEntryIdMap = make(map[string]cron.EntryID)//创建一个定时任务对象,根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始// 默认从分开始进行时间调度//C = cron.New()//精确到秒C = cron.New(cron.WithSeconds())// 这里可以查询数据库里的定时任务,加载进来。//启动C.Start()
}// 添加定时任务
func AddFuncTask(taskId, name, desc, cron string, param map[string]interface{}, cmd func(map[string]interface{})) bool {entryId, err := C.AddFunc(cron, func() {cmd(param)})if err != nil {Log.Error("task AddFuncTask start error:", err)return false}//这里可以把定时任务保存到数据库,重启程序时,可以从数据库加载定时任务addEntryId(taskId, entryId)return true
}// 删除定时任务
func DeleteTask(taskId string) {C.Remove(TaskEntryIdMap[taskId])deleteEntryId(taskId)//从数据库删除任务
}func addEntryId(taskId string, entryId cron.EntryID) {TaskEntryIdMap[taskId] = entryId
}func deleteEntryId(taskId string) {delete(TaskEntryIdMap, taskId)
}func TaskClose() {//关闭cronC.Stop()
}func main() {//初始化定时任务TaskInit()//其他业务初始化//关闭定时任务TaskClose()
}
以上示例根据业务动态调整,可以把定时任务保存到数据库,当程序重启的时候从数据库把定时任务查询出来,在启动执行。
基于cron表达式定时监控,支持任务的总体启动暂停和单个任务的启动暂停
https://github.com/dhjz/dwatch
参考链接:
https://blog.csdn.net/u013421629/article/details/129981594
相关文章:
golang开源定时任务调度框架
golang开源定时任务调度框架 Go语言中有很多开源的定时任务调度框架,以下几个是比较流行常用的: golang开源定时任务框架介绍 cron 一个基于Cron表达式的定时任务库,可以精确到秒级。它提供了简单易用的API来定义和管理定时任务ÿ…...
GridModel事件集合——yonBIP低代码
我们接着看表格相关的事件,用友的文档打不开,真的是天大的404,客观请看这个开发文档网址,找不到了,你说holy 不咯?http://tinper.org/mdf/(如果有哪位小伙伴知道这个地址是不是迁移了的话&#…...
苹果macbook电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法
苹果电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法 如何在Mac上恢复误删除的文件?在日常使用Mac电脑时,无论是工作还是娱乐,我们都会创建和处理大量的文件。然而,有时候可能会不小心删除一些重要的文件&#x…...
2024年R2移动式压力容器充装证模拟考试题库及R2移动式压力容器充装理论考试试题
题库来源:安全生产模拟考试一点通公众号小程序 2024年R2移动式压力容器充装证模拟考试题库及R2移动式压力容器充装理论考试试题是由安全生产模拟考试一点通提供,R2移动式压力容器充装证模拟考试题库是根据R2移动式压力容器充装最新版教材,R2…...
云开发超多功能工具箱组合微信小程序源码/附带流量主
这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫格 | 手持弹幕丨照片压缩 | 照片编…...
挑战杯 python+深度学习+opencv实现植物识别算法系统
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的植物识别算法研究与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:4分 🧿 更多…...
pytest的常用插件和Allure测试报告
pytest常用插件 pytest-html插件 安装: pip install pytest-html -U 用途: 生成html的测试报告 用法: 在.ini配置文件里面添加 addopts --htmlreport.html --self-contained-html 效果: 执行结果中存在html测试报告路…...
神经网络的权重是什么?
请参考这个视频https://www.bilibili.com/video/BV18P4y1j7uH/?spm_id_from333.788&vd_source1a3cc412e515de9bdf104d2101ecc26a左边是拟合的函数,右边是均方和误差,也就是把左边的拟合函数隐射到了右边,右边是真实值与预测值之间的均方…...
C语言代码 在屏幕上输出9*9乘法口诀表
在屏幕上输出9*9乘法口诀表。 代码示例: #include <stdio.h>int main() {int i 0;for (i 1; i < 9; i)//打印所有行的循环{int j 0;for (j 1; j < i; j)//打印每一行中所有列的循环{printf("%d*%d%-2d ", i, j, i * j);//%-2d的意思是两…...
11.0 Zookeeper watcher 事件机制原理剖析
zookeeper 的 watcher 机制,可以分为四个过程: 客户端注册 watcher。服务端处理 watcher。服务端触发 watcher 事件。客户端回调 watcher。 其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren …...
HGAME 2024 WEEK 1 :web ezHTTP
题目: 看到这个就知道是文件头伪造 第一想法就是Referer伪造 所以伪造 Referer: vidar.club 然后构造伪造的Referer 然后提示通过那些东西访问页面,User-Agent: 是构造你浏览器访问信息的,所以复制右边那一串替代就好了 然后要求我们从本地…...
Linux【docker 设置阿里源】
文章目录 一、查看本地docker的镜像配置二、配置阿里镜像三、检查配置 一、查看本地docker的镜像配置 docker info一般没有配置过是不会出现Registry字段的 二、配置阿里镜像 直接执行下面代码即可,安装1.10.0以上版本的Docker客户端都会有/etc/docker 1.建立配置…...
app逆向-frida-rpc详解
Frida-RPC是Frida工具的一个组件,用于在应用程序和Frida脚本之间进行远程过程调用(RPC)。远程过程调用是一种允许应用程序的不同部分或不同的应用程序之间进行通信的方法。在Frida中,RPC通过JavaScript脚本和应用程序之间建立通信…...
计算机网络(第六版)复习提纲27
7 TCP流量控制 A 利用滑动窗口实现流量控制 所谓流量控制,就是让发送方发送速率不要太快,让接收方来得及接收 1 利用窗口进行流量控制 2 持续计时器和零窗口探测报文(仅携带一字节的数据) B TCP的传输效率(TCP报文段的…...
解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)
今天也是去学习了一波字符串函数,想着也为了加深记忆,所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…...
node.js后端+小程序前端+mongoDB(增删改查)
前言 今天我对比了以下node.js的express与python的fastAPI,我决定我还是出一期关于node.jsmangoDB小程序的小案例吧。 不是python的fastAPI不好用,因为fastAPI是python较新的技术,我不敢果断发出教学文章(这件事情还是留着给pyt…...
thinkphp数据批量提交(群发消息)
<form id="edit-form" class="form-horizontal" role="form" data-toggle<...
大华 DSS 数字监控系统 attachment_getAttList.action SQL 注入漏洞复现
0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/attachment_getAttList.action 路由发送特殊构造的数据包,利用报错注入获…...
vue2学习笔记(2/2)
vue2学习笔记(1/2) vue2学习笔记(2/2) 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…...
uniapp 之 base64转临时地址播放mp3
需求是:进入页面的时候是先有背景音乐,发送问题请求回答的时候会返回文字和音频,前端要把音频读出来,并且把背景音乐停止,读完音频后再打开背景音乐 一开始用的直接base64直接拼接在地址后 真机放不了 const innerAu…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
