github.com/songzhibin97/gkit@v1.2.13/distributed/task/signature.go (about) 1 package task 2 3 import ( 4 "time" 5 6 "github.com/songzhibin97/gkit/tools/deepcopy" 7 8 "github.com/songzhibin97/gkit/options" 9 ) 10 11 type Signature struct { 12 // ID 任务唯一id,要保证多实例中id唯一 13 ID string `json:"id" bson:"_id"` 14 // Name 任务名称 15 Name string `json:"name" bson:"name"` 16 // GroupID 多集群中组id 17 GroupID string `json:"group_id" bson:"groupID"` 18 // GroupTaskCount 组中任务计数 19 GroupTaskCount int `json:"group_task_count" bson:"group_task_count"` 20 // Priority 任务优先级 21 Priority uint8 `json:"priority" bson:"priority"` 22 // RetryCount 重试次数 23 RetryCount int `json:"retry_count" bson:"retry_count"` 24 // RetryInterval 重试间隔时间 25 RetryInterval int `json:"retry_timeout" bson:"retry_timeout"` 26 // StopTaskDeletionOnError 任务出错后删除 27 StopTaskDeletionOnError bool `json:"stop_task_deletion_on_error" bson:"stop_task_deletion_on_error"` 28 // IgnoreNotRegisteredTask 忽略未注册的任务 29 IgnoreNotRegisteredTask bool `json:"not_registered" bson:"not_registered"` 30 // Router 路由 31 Router string `json:"router" bson:"router"` 32 // Args 携带参数 33 Args []Arg `json:"args" bson:"args"` 34 // MetaSafe 安全的Meta 35 MetaSafe bool `json:"meta_safe" bson:"meta_safe"` 36 // Meta 携带原信息 37 Meta *Meta `json:"meta" bson:"meta"` 38 // ETA 延时任务 39 ETA *time.Time `json:"eta" bson:"eta"` 40 // CallbackChord 组任务回调 41 CallbackChord *Signature `json:"callback_chord" bson:"callback_chord"` 42 // CallbackOnSuccess 任务成功后回调 43 CallbackOnSuccess []*Signature `json:"callback_on_success" bson:"callback_on_success"` 44 // CallbackOnError 任务失败后回调 45 CallbackOnError []*Signature `json:"callback_on_error" bson:"callback_on_error"` 46 } 47 48 // NewSignature 创建Signature 49 func NewSignature(id string, name string, options ...options.Option) *Signature { 50 task := &Signature{ 51 ID: id, 52 Name: name, 53 GroupID: "-", 54 Priority: 0, 55 RetryCount: 3, 56 RetryInterval: int(time.Minute), 57 StopTaskDeletionOnError: false, 58 IgnoreNotRegisteredTask: false, 59 Router: "gkit", 60 Args: nil, 61 MetaSafe: true, 62 Meta: NewMeta(true), 63 ETA: nil, 64 CallbackChord: nil, 65 CallbackOnSuccess: nil, 66 CallbackOnError: nil, 67 } 68 for _, option := range options { 69 option(task) 70 } 71 return task 72 } 73 74 func CopySignatures(signatures ...*Signature) []*Signature { 75 sigs := make([]*Signature, len(signatures)) 76 for index, signature := range signatures { 77 sigs[index] = CopySignature(signature) 78 } 79 return sigs 80 } 81 82 func CopySignature(signature *Signature) *Signature { 83 sig := &Signature{} 84 _ = deepcopy.DeepCopy(sig, signature) 85 return sig 86 }