当前位置: 首页 > news >正文

Go-zero微服务个人探究之路(十二)定时任务的选择调研

前言

很多时候后台需要做定时任务的需求,笔者的项目采用go-zero框架微服务框架,需要做定时任务,于是做了如下方法调研,共有大概三种主要选择

方案

难度总体由容易到复杂

go的timer库

通过Go的标准库time中的TickerTick功能来设置和管理定时任务,可以直接集成在服务启动逻辑中,不需要额外的文件或复杂的配置

func startTicker() {ticker := time.NewTicker(1 * time.Hour) // 每小时执行一次defer ticker.Stop()for {select {case <-ticker.C:// 执行定时任务fmt.Println("执行定时任务...")// 这里可以放置你的业务逻辑}}
}

cron库

使用robfig/cron这个Go库,作为大型复杂项目的定时任务,cron非常常见也非常强大

大概要在go-zero的服务启动文件里添加如下代码

    // 初始化Cron调度器cronScheduler := cron.New(cron.WithSeconds()) // 使用WithSeconds选项支持秒级调度// 添加定时任务_, err := cronScheduler.AddFunc("0 */1 * * * *", func() { // 每分钟执行一次// 定时任务的逻辑})if err != nil {logx.Errorf("添加定时任务失败: %v", err)return}// 启动Cron调度器cronScheduler.Start()// 停止Cron调度器defer cronScheduler.Stop()

go-queue

这是一种官方更加推荐的方法,不过需要配置消息队列集群,大概代码如下

package mainimport ("fmt""strconv""time""github.com/zeromicro/go-queue/dq"
)func main() {producer := dq.NewProducer([]dq.Beanstalk{{Endpoint: "localhost:11300",Tube:     "tube",},{Endpoint: "localhost:11301",Tube:     "tube",},})// 延迟 5s 后处理_, err := producer.Delay([]byte("hello"), time.Second*5)if err != nil {fmt.Println(err)}// 在指定时间点处理_, err = producer.At([]byte("hello"), time.Now().Add(time.Second*10))if err != nil {fmt.Println(err)}
}

总结

go-queue的方案直接被笔者排除了,不再额外配置消息队列集群,

其他两个方法比较也很明显


使用Cron库,可以在同一个调度器中管理多个任务,每个任务都有自己的Cron表达式

使用timer,如果有很多不同的任务,需要不同的时间间隔,管理这些会很麻烦


使用timer不需要引入依赖,使用cron需要引入依赖


相关文章:

Go-zero微服务个人探究之路(十二)定时任务的选择调研

前言 很多时候后台需要做定时任务的需求&#xff0c;笔者的项目采用go-zero框架微服务框架&#xff0c;需要做定时任务&#xff0c;于是做了如下方法调研&#xff0c;共有大概三种主要选择 方案 难度总体由容易到复杂 go的timer库 通过Go的标准库time中的Ticker和Tick功能…...

Java中,List、Map和Set的区别是什么?

在Java中&#xff0c;List、Map和Set是三种常用的集合类型&#xff0c;它们之间的主要区别如下&#xff1a; 1、List List是有序集合&#xff0c;它可以包含重复元素。 List中的元素是按照插入顺序排列的&#xff0c;可以通过索引访问每个元素。 Java中常见的List实现类有A…...

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

链表基础知识汇总

链表 链表是一种基本的数据结构&#xff0c;是由一系列节点组成的集合。每个节点包含两个部分&#xff1a;值和指向下一个节点的指针。链表中的节点可以动态地添加、删除&#xff0c;其大小可以根据需要进行扩展或缩小。 链表通常用于处理不固定长度的数据结构&#xff0c;具有…...

Educational Codeforces Round 2(远古edu计划)

A. 恶心模拟。。 模拟一下分类即可 数字类&#xff0c;数字0&#xff0c;或者都是数字 字母类&#xff0c;字母空的也是字母&#xff0c;有字母就是字母 #include<bits/stdc.h> #define INF 1e9 using namespace std; typedef long long ll; const int N2e59; strin…...

【Tauri】(1):使用Tauri1.5版本,进行桌面应用开发,在windows,linux进行桌面GUI应用程序开发,可以打包成功,使用 vite 最方便

1&#xff0c;视频地址&#xff1a; https://www.bilibili.com/video/BV1Pz421d7s4/ 【Tauri】&#xff08;1&#xff09;&#xff1a;使用Tauri1.5版本&#xff0c;进行桌面应用开发&#xff0c;在windows&#xff0c;linux进行桌面GUI应用程序开发&#xff0c;可以打包成功&…...

「Linux」软件安装

MySQL5.7在CentOS安装 安装 配置yum仓库 更新密钥&#xff1a;rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL yum库&#xff1a;rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm使用yum安装MySQL&#xff1a;yum -y in…...

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…...

Java 三大并大特性-可见性介绍(结合代码、分析源码)

目录 ​编辑 一、可见性概念 1.1 概念 二、可见性问题由来 2.1 由来分析 三、可见性代码例子 3.1 代码 3.2 执行结果 四、Java 中保证可见性的手段 4.1 volatile 4.1.1 优化代码 4.1.2 测试结果 4.1.3 volatile原理分析 4.1.3.1 查看字节码 4.1.3.2 hotspot 层面…...

【漏洞复现】狮子鱼CMS某SQL注入漏洞01

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…...

《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)

文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例&#xff1a;实现一个简单的计数器6.1.3 拓展案例 1&#xff1a;定时器线程6.1.4 拓展案例 2&#xff1a;使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…...

C++初阶:容器(Containers)list常用接口详解

介绍完了vector类的相关内容后&#xff0c;接下来进入新的篇章&#xff0c;容器list介绍&#xff1a; 文章目录 1.list的初步介绍2.list的定义&#xff08;constructor&#xff09;3.list迭代器&#xff08; iterator &#xff09;4.string的三种遍历4.1迭代器4.2范围for循环 5…...

HARRYPOTTER: FAWKES

攻击机 192.168.223.128 目标机192.168.223.143 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.143 开启了21 22 80 2222 9898 五个端口&#xff0c;其中21端口可以匿名FTP登录&#xff0c;好像有点说法,百度搜索一下发现可以用anonymous登录…...

嵌入式Qt 第一个Qt项目

一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照向导进行下一步 选…...

【OpenHarmony硬件操作】风扇与温湿度模块

文章目录 前言一、串行通信是什么二、IC2.1 IC是什么2.2 IC涉及到的线2.3 IC的时序三、风扇的操作3.1 关于 pcf85743.2 风扇的接口函数IO拓展芯片的定义初始化PCF8574初始化 IO拓展版的引脚属性开启和关闭风扇读状态四、温湿度传感器的使用4.1 初始化温湿度传感器</...

Vue3.4+element-plus2.5 + Vite 搭建教程整理

一、 Vue3Vite 项目搭建 说明&#xff1a; Vue3 最新版本已经基于Vite构建&#xff0c;关于Vite简介&#xff1a;Vite 下一代的前端工具链&#xff0c;前端开发与构建工具-CSDN博客 1.安装 并 创建Vue3 应用 npm create vuelatest 创建过程可以一路 NO 目前推荐使用 Vue R…...

STM32Cubmax stm32f103zet6 SPI通讯

一、基本概念 SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM&#xff0c; FLASH&#xff0c;实时时 钟&#xff0c; AD 转换器&#xff0c;还有数…...

每日OJ题_位运算⑤_力扣371. 两整数之和

目录 力扣371. 两整数之和 解析代码 力扣371. 两整数之和 371. 两整数之和 难度 简单 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - &#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a;a 1, b 2 输出&#xff1a;3示例 2&#xff1a; …...

Mysql中索引优化和失效

什么是索引 要了解索引优化和索引失效的场景就要先了解什么是索引 索引是一种有序的存储结构&#xff0c;按照单个或者多个列的值进行排序&#xff0c;以提升搜索效率。 索引的类型 UNIQUE唯一索引 不可以出现相同的值&#xff0c;可以有NULL值。 INDEX普通索引 允许出现相同…...

使用Python+OpenCV2进行图片中的文字分割(支持竖版)

扣字和分割 把图片中的文字&#xff0c;识别出来&#xff0c;并将每个字的图片抠出来&#xff1b; import cv2 import numpy as npHIOG 50 VIOG 3 Position []水平投影 def getHProjection(image):hProjection np.zeros(image.shape,np.uint8)# 获取图像大小(h,w)image.sh…...

InstructPix2Pix真实体验:保留原图结构的智能修图,到底有多好用?

InstructPix2Pix真实体验&#xff1a;保留原图结构的智能修图&#xff0c;到底有多好用&#xff1f; 1. 颠覆传统的修图体验 作为一名长期与图像处理打交道的技术从业者&#xff0c;我第一次使用InstructPix2Pix时的感受可以用"惊艳"来形容。传统的图像编辑工具需要…...

C++的std--ranges缓存性能

C的std::ranges缓存性能探析 在现代C编程中&#xff0c;std::ranges作为C20引入的重要特性&#xff0c;为算法和视图操作提供了更简洁、高效的表达方式。其性能表现&#xff0c;尤其是缓存友好性&#xff0c;直接影响实际应用的效率。本文将从多个角度探讨std::ranges的缓存性…...

PathOfBuilding:流放之路玩家的离线构建神器,打造最强角色规划方案

PathOfBuilding&#xff1a;流放之路玩家的离线构建神器&#xff0c;打造最强角色规划方案 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 你是否曾经在《流放之路》中花…...

通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力

通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势&#xff1a;对比传统方案在边缘计算场景下的潜力 最近在折腾一些边缘设备上的AI应用&#xff0c;发现一个挺有意思的现象&#xff1a;大家一提到部署大模型&#xff0c;脑子里蹦出来的第一个念头往往是“得找个性能强劲的服务…...

Windows 7 SP2重构方案:现代硬件适配与系统焕新体验

Windows 7 SP2重构方案&#xff1a;现代硬件适配与系统焕新体验 【免费下载链接】win7-sp2 UNOFFICIAL Windows 7 Service Pack 2, to improve basic Windows 7 usability on modern systems and fully update Windows 7. 项目地址: https://gitcode.com/gh_mirrors/wi/win7-…...

别再手动填Excel了!用Java+Spire.XLS 15.6.3实现批量报表自动化(附完整源码)

Java报表自动化革命&#xff1a;Spire.XLS实战指南与生产力跃迁 凌晨三点的办公室&#xff0c;最后一份月度销售报表终于核对完毕。这样的场景是否似曾相识&#xff1f;据统计&#xff0c;全球超过70%的企业级数据仍通过Excel流转&#xff0c;而其中近40%的时间消耗在机械化的…...

Live2D资源解析技术解析与实战:从格式障碍到跨领域应用

Live2D资源解析技术解析与实战&#xff1a;从格式障碍到跨领域应用 【免费下载链接】AzurLaneLive2DExtract OBSOLETE - see readme / 碧蓝航线Live2D提取 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneLive2DExtract 一、诊断资源解析障碍 1.1 识别技术痛点&…...

揭秘新篇!AI应用架构师的数据安全服务AI防护新思路

揭秘新篇&#xff01;AI应用架构师的数据安全服务AI防护新思路 一、引言&#xff1a;AI时代的数据安全困局 当我们谈论AI应用时&#xff0c;数据是一切的核心——它是模型训练的“燃料”&#xff0c;是推理决策的“依据”&#xff0c;更是企业的核心资产。但随着AI技术的普及&a…...

红枣切片机的设计【说明书+CAD图纸+solidworks三维+开题报告+答辩PPT】

红枣切片机的设计聚焦于提升切片效率与切片质量&#xff0c;其核心作用在于通过机械结构优化与传动系统设计&#xff0c;实现红枣的自动化、标准化切片加工。设备采用旋转刀盘与固定进料轨道的协同工作模式&#xff0c;刀盘以均匀转速旋转&#xff0c;红枣在重力与轨道约束下依…...

Wan2.1 VAE模型蒸馏与轻量化部署探索

Wan2.1 VAE模型蒸馏与轻量化部署探索 最近在折腾一些生成模型的实际落地&#xff0c;发现一个挺普遍的问题&#xff1a;模型效果是真好&#xff0c;但体积也是真的大&#xff0c;推理起来对硬件的要求不低。特别是想把模型搬到一些资源有限的边缘设备&#xff0c;或者希望降低…...