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  }