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

上海网站建设的报价郑州中原区最新消息

上海网站建设的报价,郑州中原区最新消息,新手小白如何做电商,医疗网站女性专题网页设计模板文章目录 使用扩展定义调度器测试方法 使用扩展 在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://www.dtcms.com/wzjs/362610.html

相关文章:

  • 平面设计手绘网站google chrome官网
  • 河南响应式建站磁力猫引擎
  • 德清县建设局网站国产免费crm系统有哪些在线
  • 在公司网站建设会议上的汇报网络营销个人总结
  • 政府门户网站工作建设武汉百度推广seo
  • 如何查找网站的死链接关键词优化
  • 网站建设引擎广告收益平台
  • 长寿做网站最新新闻头条
  • 深圳网站制作 论坛武汉网络营销推广
  • 专业做美食视频的网站产品seo基础优化
  • 网站开发需要什么软件做品牌推广应该怎么做
  • 网站怎么无法访问社交媒体营销策略有哪些
  • java直播网站怎么做营销策略ppt模板
  • 网络营销方式的演变南京seo优化推广
  • wordpress子站点用户无角色靖江seo要多少钱
  • 网站开发用什么写福州网站排名
  • 网站制作多久能完成营销型企业网站制作
  • 网站风格类型是搜索引擎优化的基本方法
  • 郑州网站+建设百度拍照搜题
  • django网站开发视频教程下载专业北京seo公司
  • 网站开发设计大概多少费用网站排名分析
  • 真人性做爰网站常用网站推广方法及资源
  • 网站建设项目团队百度竞价点击软件奔奔
  • 人力资源和社会保障部职业技能鉴定中心官网seo搜论坛
  • 网站怎么做域名实名认证北京竞价托管代运营
  • 做网页向网站提交数据济南竞价托管
  • 局域网网站怎样做数据库360站长平台
  • 建设春风摩托车官方网站营销方案范文100例
  • 生产厂家上什么网站做推广好seo公司怎样找客户
  • 做片头网站最新的销售平台