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

常平建设局网站wordpress主题腾讯EDC

常平建设局网站,wordpress主题腾讯EDC,三明市网站建设,wordpress后退会选中文字文章目录 使用扩展定义调度器测试方法 使用扩展 在go-zero框架中使用定时任务调度的写法示例,首先需要用到的扩展:go get -u github.com/robfig/cron/v3 扩展网址:robfig/cron: a cron library for go (github.com) 定义调度器 在 gozero/i…

文章目录

  • 使用扩展
  • 定义调度器
  • 测试方法

使用扩展

在go-zero框架中使用定时任务调度的写法示例,首先需要用到的扩展:go get -u github.com/robfig/cron/v3

扩展网址:robfig/cron: a cron library for go (github.com)

定义调度器

gozero/internal 目录下新建 crontab目录,然后首先需要创建一个配置文件:gozero/internal/crontab/config.go ,在这里我写上两个示例的定时任务,分别为“20秒打印一次SayHello”,以及“每一分钟查询一次当前用户总数”:

package crontabtype TaskConfig struct {Name      string `json:"name"`      //任务名称Scheduler string `json:"scheduler"` //@every表达式中的单位可以是s(秒)、m(分钟)、h(小时)等Enabled   bool   // 是否启用
}func DefaultTask() []TaskConfig {return []TaskConfig{{Name:      "SayHello",Scheduler: "@every 20s", //每20秒钟执行一次Enabled:   true,},{Name:      "StatisticsUserCount",Scheduler: "@every 1m", //每1分钟执行一次Enabled:   true,},}
}

然后,定义定时任务调度器文件:gozero/internal/crontab/scheduler.go,这个文件中,先定义好调度器的结构体和注册方法以及启动方法。代码如下:

type Scheduler struct {cron   *cron.CronsvcCtx *svc.ServiceContext
}// NewScheduler creates a new scheduler instance.
func NewScheduler(svcCtx *svc.ServiceContext) *Scheduler {return &Scheduler{cron:   cron.New(),svcCtx: svcCtx,}
}// RegisterTask registers a task with the scheduler.
func (s *Scheduler) RegisterTask(name, schedule string, task func(ctx context.Context, svcCtx *svc.ServiceContext)) {_, err := s.cron.AddFunc(schedule, func() {task(context.Background(), s.svcCtx)})if err != nil {log.Fatalf("Failed to register task %s: %v", name, err)}log.Printf("Registered task %s with schedule %s", name, schedule)
}func (s *Scheduler) Start() {s.cron.Start()log.Println("Scheduler started")
}func (s *Scheduler) Stop() {s.cron.Stop()log.Println("Scheduler stopped")
}

上面的 Start() 和 Stop() 方法,分别实现了 vendor/github.com/robfig/cron/v3/cron.go 中的 Start() 和 Stop() 方法。

接下来,需要初始化定时任务调度器,对于config.go中配置好的定时任务,分别实现不同的业务逻辑。

// InitScheduler 初始化定时任务调度器
func InitScheduler(svcCtx *svc.ServiceContext) (*Scheduler, error) {log.Println("Initializing scheduler...")scheduler := NewScheduler(svcCtx)if scheduler == nil {return nil, fmt.Errorf("failed to create scheduler")}taskConfigs := DefaultTask()if taskConfigs == nil {return nil, fmt.Errorf("failed to load task configurations")}for _, taskConfig := range taskConfigs {if !taskConfig.Enabled {log.Printf("Task %s is disabled, skipping...", taskConfig.Name)continue}log.Printf("Registering task %s...", taskConfig.Name)switch taskConfig.Name {case "SayHello": //SayHelloscheduler.RegisterTask(taskConfig.Name, taskConfig.Scheduler, hello.SayHello)case "StatisticsUserCount": //统计用户总数scheduler.RegisterTask(taskConfig.Name, taskConfig.Scheduler, user.StatisticsUserCount)case "xxxx":// todo 注册其他定时任务default:log.Printf("Unknown task: %s", taskConfig.Name)}}return scheduler, nil
}

接下来, 在入口文件gozero/gozero.gomain方法中调用上面定义好的调度器:

func main() {//....// 定时任务调度scheduler, err := crontab.InitScheduler(ctx)if err != nil {fmt.Printf("Failed to initialize scheduler: %v", err)}scheduler.Start()fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)server.Start()
}

测试方法

接下来,在 gozero/internal/crontab/task 目录下,新建两个测试方法,测试一下上面配置的两个定时任务:

  • SayHello方法: gozero/internal/crontab/task/hello/say_hello.go
func SayHello(ctx context.Context, svcCtx *svc.ServiceContext) {fmt.Println("SayHello running at:", time.Now())return
}
  • 查询用户总数的方法:gozero/internal/crontab/task/user/statistics_user_count.go
package userfunc StatisticsUserCount(ctx context.Context, svcCtx *svc.ServiceContext) {fmt.Println("StatisticsUserCount running at:", time.Now())listLogic := admin.NewUserListLogic(ctx, svcCtx)count, err := listLogic.GetUserCount() //调用逻辑层查询数据库if err != nil {fmt.Println("StatisticsUserCount error:", err)return}if count == 0 {fmt.Println("StatisticsUserCount count is 0")return}fmt.Println("StatisticsUserCount count:", count)return
}

然后运行一下:

image-20250225113155576

这样就可以轻松的在go-zero中实现定时任务的调度了,可以精确到秒级别。

https://gitee.com/rxbook/go-demo-2025/tree/master/gozero


文章转载自:

http://0ZzHEO7N.dsncg.cn
http://65Vbopob.dsncg.cn
http://DJBteKRO.dsncg.cn
http://PL1ObmML.dsncg.cn
http://VROLZyfw.dsncg.cn
http://Az7dmJba.dsncg.cn
http://nEc7YhHb.dsncg.cn
http://LPWCwDjM.dsncg.cn
http://uH0TXOtc.dsncg.cn
http://ED4giT9j.dsncg.cn
http://E2jl3ch7.dsncg.cn
http://FAdxfdJb.dsncg.cn
http://5idqgHUm.dsncg.cn
http://nXfSExul.dsncg.cn
http://tKVqh7M8.dsncg.cn
http://6Tdtn1EH.dsncg.cn
http://Hm5zXn7q.dsncg.cn
http://qFqU7Fu2.dsncg.cn
http://3MZzimBS.dsncg.cn
http://trriAnGC.dsncg.cn
http://MnTUxSqE.dsncg.cn
http://oS5SGw7Q.dsncg.cn
http://HL2khQwa.dsncg.cn
http://ZfebXXQa.dsncg.cn
http://z5DVvDqY.dsncg.cn
http://2uFXYGpt.dsncg.cn
http://aRxt2JbV.dsncg.cn
http://cFikGyxs.dsncg.cn
http://YcCAh1Qs.dsncg.cn
http://VjB6yfsm.dsncg.cn
http://www.dtcms.com/wzjs/643527.html

相关文章:

  • 上海内贸网站建设ps专门做兼职的网站
  • 宁阳网站定制巨量数据分析入口
  • 网站开发 学习步骤整站优化报价
  • 网站开发税收标准网站研发公司
  • 网址网站注册蓝色phpcms律师网站模板phpcms律师
  • 可视化课题组网站建设教程求职简历模板免费可编辑
  • 网站模板减肥wordpress怎么调用多语言
  • 织梦免费网站模块下载地址emlog转换wordpress
  • 最佳外贸建站平台wordpress管理插件
  • 外贸公司网站制作价格设计素材网站哪个好
  • 网站建设 镇江丹阳营销推广策略
  • 网站建设接外包流程图管理系统项目
  • 漯河网站建设哪家重庆企业网站开发服务器
  • 打开网上免费网站吗鞍山玉佛苑玉佛图片
  • 海天网站建设付费下载网站源码
  • 站长百科 wordpress下列软件属于网站开发工具的是
  • 免费企业网站程序深圳网站开发antnw
  • 网站建设在作用是什么什么是网络营销?网络营销的特点有哪些?
  • 比邻店网站开发深圳做企业网站的公
  • 营业执照 网站开发网站推广工具有
  • 成都网站备案太慢国外服务器域名需要备案吗
  • 自己做民宿在什么网站上投放网站自助建设平台
  • 以下属于网站seo的内容是淘宝店做箱包哪个网站拿货
  • 十大免费ppt课件网站昆明网站外包
  • 自己做的php网站进行伪静态韩国在中国做美食的视频网站有哪些
  • 网上商城交易平台新手怎么做seo
  • 网站meta模板成都市网站建设服务商
  • 永康做网站的wordpress小程序编辑
  • 0716网站建设注册公司代理记账
  • 国外做机械设计任务的网站怎样用阿里云服务器做网站