go runtine 失败了怎么办

来源:7-9 scheduler的改造

陈大洋

2019-02-25

func DeleteVideo(w http.ResponseWriter,r *http.Request,p httprouter.Params){
	if !ValidateUser(w,r){
		return
	}
	vid:=p.ByName("vid-id")
	err:=dbops.DeleteVideoInfo(vid)
	if err!=nil{
		log.Printf("error in DeleteVideo: %s",err)
		sendErrorResponse(w,defs.ErrorDBError)
		return
	}
	go utils.SendDeleteVideoRequest(vid) //加入3秒后这里失败了怎么办,下边一行早已经发出了删除成功的提示。
	sendNormalResponse(w,"",204)
}
写回答

1回答

艾文西

2019-02-26

这里可以添加一个重试机制,如果失败重新删除一次。上面dbops已经操作了,库里已经没有这条记录了,所以在数据一致性上是没有问题的。

实际上关于数据回收,更好的办法是通过scheduler定期做clean,异步非commit的任务总会有失败问题。

0
0

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程