-
Notifications
You must be signed in to change notification settings - Fork 999
Open
Description
workflow 模式下,当分支返回其他错误,不会进行指数退避重试,而是会采用固定重试
AddCommand("http_workflow_saga_rollback", func() string {
wfName := "wf_saga_rollback"
err := workflow.Register(wfName, func(wf *workflow.Workflow, data []byte) error {
req := MustUnmarshalReqHTTP(data)
_, err := wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
_, err := wf.NewRequest().SetBody(req).Post(busi.Busi + "/TransOutRevert")
return err
}).NewRequest().SetBody(req).Post(busi.Busi + "/TransOut")
if err != nil {
return err
}
_, err = wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
_, err := wf.NewRequest().SetBody(req).Post(busi.Busi + "/TransInRevert")
return err
}).NewRequest().SetBody(req).Post(busi.Busi + "/TransIn")
if err != nil {
return err
}
return nil
})
logger.FatalIfError(err)
//只会固定时间重试,固定为10s
req := &busi.ReqHTTP{Amount: 30, TransOutResult: "ERROR"}
//req := &busi.ReqHTTP{Amount: 30, TransInResult: dtmcli.ResultFailure}
gid := shortuuid.New()
err = workflow.Execute(wfName, gid, dtmimp.MustMarshal(req))
logger.Infof("result is: %v", err)
return gid
})
因为上一个问题,指数退避变为了固定重试,所以我想调整RetryInterval,但是发现 虽然在ui 里改变了间隔时间
但是实际重试间隔依旧为10s左右
err := workflow.Register2(wfName, func(wf *workflow.Workflow, data []byte) ([]byte, error) {
var paramData Param
err := json.Unmarshal(data, ¶mData)
if err != nil {
return nil, err
}
log.Println("进入了Register")
wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
_, err := wf.NewRequest().SetBody(model.TransRequestArgsHTTP{
Uid: paramData.AUid,
Amount: paramData.Amount,
}).Post(baseUrl + "/api/SagaTransOutRollBack")
if err != nil {
return err
}
return nil
})
res, err := wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{
Uid: paramData.AUid,
Amount: -paramData.Amount,
}).Post(baseUrl + "/api/SagaTransOut")
if err != nil {
return nil, err
}
wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
_, err := wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{
Uid: paramData.BUid,
Amount: -paramData.Amount,
}).Post(baseUrl + "/api/SagaTransInRollBack")
if err != nil {
return err
}
return nil
})
res, err = wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{Uid: paramData.BUid, Amount: paramData.Amount}).Post(baseUrl + "/api/SagaTransIn")
if err != nil {
return nil, err
}
return res.Body(), nil
}, func(wf *workflow.Workflow) {
//因为上一个问题,指数退避变为了固定重试,所以我想调整RetryInterval
wf.RetryInterval = 5
})

Metadata
Metadata
Assignees
Labels
No labels