You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在go-micro v4框架中设置定时任务?求示例参考

Go-Micro v4 定时任务实现示例

Go-Micro v4 本身没有内置定时任务模块,通常结合Go生态中成熟的定时库 github.com/robfig/cron/v3 来实现,下面是完整的实现示例:

1. 安装依赖

首先安装所需的依赖包:

go get github.com/go-micro/v4
go get github.com/robfig/cron/v3

2. 完整示例代码

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"

	"github.com/go-micro/v4"
	"github.com/robfig/cron/v3"
)

// 定时任务执行函数示例
func sampleTask() {
	fmt.Println("定时任务执行中:", cron.Now().Format("2006-01-02 15:04:05"))
	// 可在此扩展业务逻辑,比如调用Go-Micro服务
	// 示例:调用其他服务
	// client := micro.NewService()
	// req := client.NewRequest("service.name", "Method", &Request{})
	// var rsp Response
	// if err := client.Call(context.Background(), req, &rsp); err != nil {
	//     log.Fatal(err)
	// }
}

func main() {
	// 初始化Go-Micro服务
	service := micro.NewService(
		micro.Name("cron.service"),
		micro.Version("v1.0.0"),
	)
	service.Init()

	// 初始化支持秒级定时的Cron实例
	c := cron.New(cron.WithSeconds())

	// 添加每5秒执行一次的定时任务
	_, err := c.AddFunc("*/5 * * * * *", sampleTask)
	if err != nil {
		log.Fatalf("添加定时任务失败: %v", err)
	}

	// 添加每日凌晨2点执行的定时任务
	_, err = c.AddFunc("0 0 2 * * *", func() {
		fmt.Println("每日定时任务执行:", cron.Now().Format("2006-01-02 15:04:05"))
	})
	if err != nil {
		log.Fatalf("添加每日定时任务失败: %v", err)
	}

	// 启动Cron调度器
	c.Start()
	defer c.Stop()

	// 监听系统退出信号,实现优雅关机
	sigChan := make(chan os.Signal, 1)
	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

	// 启动Go-Micro服务
	go func() {
		if err := service.Run(); err != nil {
			log.Fatalf("服务启动失败: %v", err)
		}
	}()

	// 等待退出信号触发
	<-sigChan
	log.Println("开始停止服务和定时任务...")
}

3. 关键说明

  • Cron表达式: 示例启用了秒级精度(通过cron.WithSeconds()),使用6位表达式;若不需要秒级定时,可移除该选项,使用标准5位表达式。
  • 生命周期管理: 通过defer c.Stop()确保服务退出时定时任务优雅停止,结合系统信号监听实现整体服务的优雅关机。
  • 业务扩展: 定时任务函数内可直接调用Go-Micro客户端,实现服务间调用,完成复杂业务逻辑。
  • 多任务支持: 可通过c.AddFunc()或c.AddJob()添加多个不同规则的定时任务,满足多样化需求。

内容的提问来源于stack exchange,提问作者FamousMai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 14:05:24