-
Notifications
You must be signed in to change notification settings - Fork 36
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优先保障任务运行,而不是结果保存。
如果你特别需要任务结果,推荐你在任务函数中自行保存。