客户端

获取连接

获取连接前一样需要初始化Server,然后调用GetClient()NewServer的参数可以和服务端不同,但建议使用相同的参数配置

import "github.com/gojuukaze/YTask/v3"

ser := ytask.Server.NewServer(
        ytask.Config.Broker(&broker),
        ytask.Config.Backend(&backend),
        ...
)

client = ser.GetClient()

发送信息

使用Send发送任务信息,函数前两个参数为组名、任务,后面的参数是任务函数的参数。函数第一个返回值为任务id,可以用来获取任务结果。
发送消息时可以使用SetTaskCtl()配置该次任务的重试次数等
// group1 : 组名
// add : 任务名
// 12,33 ... : 任务参数
// return :
//   - taskId : taskId
//   - err : error
taskId,err:=client.Send("group1","add",12,33)

// set retry count
taskId,err=client.SetTaskCtl(client.RetryCount, 5).Send("group1","add",12,33)

// set delay time
taskId,err=client.SetTaskCtl(client.RunAfter, 2*time.Second).Send("group1","add",12,33)

// set expire time
taskId,err=client.SetTaskCtl(client.ExpireTime,time.Now().Add(4*time.Second)).Send("group1","add",12,33)

获取结果

可通过 GetResult()GetResult2() 获取结果

  • GetResult() : 只有任务结束才返回(任务失败、完成都是结束)

  • GetResult2() : backend中有记录就返回(一般来说任务开始执行就会有),这个通常用于获取任务流进度

GetResult()GetResult2()的第2个参数为超时时间,第3个参数为重新获取时间。
获取结果后可调用GetXX()Get()Gets()获取任务函数的返回结果。
// taskId :
// 3*time.Second : timeout
// 300*time.Millisecond : sleep time
result, _ := client.GetResult(taskId, 3*time.Second, 300*time.Millisecond)

if result.IsSuccess(){
    // get worker func return
    a,err:=result.GetInt64(0)
    b,err:=result.GetBool(1)

    // or
    var a int
    var b bool
    err:=result.Get(0, &a)
    err:=result.Get(1, &b)

    // or
    var a int
    var b bool
    err:=result.Gets(&a, &b)
}
重要!!
YTask虽然提供获取结果功能,但不要过渡依赖。
如果backend出错导致无法保存结果,YTask不会再次重试。因为对任务状态、结果的保存与运行任务的goroutine是同一个,不断重试会导致worker被占用。 YTask优先保障任务运行,而不是结果保存。
如果你特别需要任务结果,推荐你在任务函数中自行保存。