Skip to content

client zh cn

gojuukaze edited this page Aug 27, 2022 · 2 revisions

获取连接

获取连接前一样需要初始化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)

获取结果

调用GetResult()获取任务结果,第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是同一个,不断重试会导致任务无法开始或无法结束。 YTask优先保障任务运行,而不是结果保存。
如果你特别需要任务结果,推荐你在任务函数中自行保存。