diff --git a/cluster.go b/cluster.go index e7c4a8d..b76bb01 100644 --- a/cluster.go +++ b/cluster.go @@ -10,6 +10,7 @@ import ( "time" "github.com/go-redis/redis/v8" + uuid "github.com/satori/go.uuid" "github.com/yuninks/cachex" "github.com/yuninks/lockx" ) @@ -440,6 +441,8 @@ func (c *Cluster) doTask(ctx context.Context, taskId string) { } }() + ctx = context.WithValue(ctx, "trace_id", uuid.NewV4().String) + // 执行任务 t.Callback(ctx, t.ExtendData) } diff --git a/cmd/main.go b/cmd/main.go index 16c3474..54068f8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -68,7 +68,7 @@ func worker() { type Worker struct{} -func (w *Worker) Worker(jobType string, uniqueKey string, data interface{}) (timerx.WorkerCode, time.Duration) { +func (w *Worker) Worker(ctx context.Context, jobType string, uniqueKey string, data interface{}) (timerx.WorkerCode, time.Duration) { fmt.Println("执行时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println(uniqueKey, jobType) fmt.Println(data) diff --git a/go.mod b/go.mod index bd6a1c1..689e1c9 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( github.com/go-redis/redis/v8 v8.11.5 + github.com/satori/go.uuid v1.2.0 github.com/yuninks/cachex v1.0.5 github.com/yuninks/lockx v1.0.2 ) @@ -11,4 +12,5 @@ require ( require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/go.sum b/go.sum index 91e4db7..8b561b9 100644 --- a/go.sum +++ b/go.sum @@ -5,9 +5,16 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/yuninks/cachex v1.0.5 h1:Y2NmTsuEgwEVYb7FVFh5tUN67kmrUioeksQqLbOAwsM= github.com/yuninks/cachex v1.0.5/go.mod h1:5357qz18UvHTJSgZzkMamUzZoFzGeKG9+4tIUBXRSVM= github.com/yuninks/lockx v1.0.2 h1:p0n791WmsU8D7YF2tQaNLwPE75jdd774unlJZRTNfaw= @@ -15,5 +22,7 @@ github.com/yuninks/lockx v1.0.2/go.mod h1:J6wvuUELLcMn6FCmiZFt7K5w1QQAh1myL7h3Jr golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/once.go b/once.go index 8674ee7..4876f3f 100644 --- a/once.go +++ b/once.go @@ -11,6 +11,7 @@ import ( "time" "github.com/go-redis/redis/v8" + uuid "github.com/satori/go.uuid" ) // 功能描述 @@ -43,7 +44,7 @@ type Callback interface { // @param data interface{} 任务数据 // @return WorkerCode 任务执行结果 // @return time.Duration 任务执行时间间隔 - Worker(jobType string, uniTaskId string, attachData interface{}) (WorkerCode, time.Duration) + Worker(ctx context.Context, jobType string, uniTaskId string, attachData interface{}) (WorkerCode, time.Duration) } var wo *Once = nil @@ -182,7 +183,10 @@ func (w *Once) doTask(key string) { json.Unmarshal([]byte(str), &ed) fmt.Println("开始时间:", time.Now().Format("2006-01-02 15:04:05")) - code, t := w.worker.Worker(s[0], s[1], ed.Data) + + ctx := context.WithValue(context.Background(), "trace_id", uuid.NewV4().String) + + code, t := w.worker.Worker(ctx, s[0], s[1], ed.Data) if code == WorkerCodeAgain { // 重新放入队列 diff --git a/single.go b/single.go index 889d4ad..3a4d38b 100644 --- a/single.go +++ b/single.go @@ -8,6 +8,8 @@ import ( "runtime/debug" "sync" "time" + + uuid "github.com/satori/go.uuid" ) // 简单定时器 @@ -283,5 +285,8 @@ func (s *Single) doTask(ctx context.Context, call callback, extend interface{}) s.logger.Errorf(ctx, "timer:定时器出错 err:%+v stack:%s", err, string(debug.Stack())) } }() + + ctx = context.WithValue(ctx, "trace_id", uuid.NewV4().String) + return call(ctx, extend) }