news 2026/3/11 5:32:06

15.2 太牛了!任务超时控制和重试策略竟然还能这样实现?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15.2 太牛了!任务超时控制和重试策略竟然还能这样实现?

15.2 太牛了!任务超时控制和重试策略竟然还能这样实现?

在分布式任务调度系统中,任务超时控制和重试策略是确保系统稳定性和任务可靠执行的重要机制。今天我们将深入探讨如何实现这些关键功能。

任务超时控制机制

任务超时控制是防止任务执行时间过长而阻塞系统资源的重要手段。我们需要实现精确的超时检测和优雅的超时中断机制。

packagetimeoutimport("context""fmt""sync""time")// TimeoutManager 超时管理器typeTimeoutManagerstruct{tasksmap[string]*TaskTimeoutInfo mu sync.RWMutex stopChchanstruct{}}// TaskTimeoutInfo 任务超时信息typeTaskTimeoutInfostruct{TaskIDstringDeadline time.Time Timeout time.Duration CancelFunc context.CancelFunc Callback TimeoutCallback Status TimeoutStatus}// TimeoutStatus 超时状态typeTimeoutStatusintconst(TimeoutStatusPending TimeoutStatus=iotaTimeoutStatusRunning TimeoutStatusTimeout TimeoutStatusCompleted)// TimeoutCallback 超时回调函数typeTimeoutCallbackfunc(taskIDstring)error// NewTimeoutManager 创建超时管理器funcNewTimeoutManager()*TimeoutManager{tm:=&TimeoutManager{tasks:make(map[string]*TaskTimeoutInfo),stopCh:make(chanstruct{}),}// 启动超时检查协程gotm.run()returntm}// AddTask 添加任务超时监控func(tm*TimeoutManager)AddTask(taskIDstring,timeout time.Duration,callback TimeoutCallback)error{tm.mu.Lock()defertm.mu.Unlock()// 检查任务是否已存在if_,exists:=tm.tasks[taskID];exists{returnfmt.Errorf("task %s already exists",taskID)}// 创建上下文和取消函数ctx,cancel:=context.WithTimeout(context.Background(),timeout)// 创建任务超时信息taskInfo:=&TaskTimeoutInfo{TaskID:taskID,Deadline:time.Now().Add(timeout),Timeout:timeout,CancelFunc:cancel,Callback:callback,Status:TimeoutStatusPending,}tm.tasks[taskID]=taskInforeturnnil}// StartTask 开始任务超时监控func(tm*TimeoutManager)StartTask(taskIDstring)error{tm.mu.Lock()defertm.mu.Unlock()taskInfo,exists:=tm.tasks[taskID]if!exists{returnfmt.Errorf("task %s not found",taskID)}taskInfo.Status=TimeoutStatusRunning taskInfo.Deadline=time.Now().Add(taskInfo.Timeout)returnnil}// CompleteTask 完成任务func(tm*TimeoutManager)CompleteTask(taskIDstring)error{tm.mu.Lock()defertm.mu.Unlock()taskInfo,exists:=tm.tasks[taskID]if!exists{returnfmt.Errorf("task %s not found",taskID)}// 取消上下文iftaskInfo.CancelFunc!=nil{taskInfo.CancelFunc()}taskInfo.Status=TimeoutStatusCompleted// 从监控列表中移除delete(tm.tasks,taskID)returnnil}// run 运行超时检查func(tm*TimeoutManager)run(){ticker:=time.NewTicker(100*time.Millisecond)deferticker.Stop()for{select{case<-ticker.C:tm.checkTimeouts()case<-tm.stopCh:return}}}// checkTimeouts 检查超时任务func(tm*TimeoutManager)checkTimeouts(){tm.mu.Lock()defertm.mu.Unlock()now:=time.Now()vartimeoutTasks[]*TaskTimeoutInfo// 查找超时任务for_,taskInfo:=rangetm.tasks{iftaskInfo.Status==TimeoutStatusRunning&&now.After(taskInfo.Deadline){timeoutTasks=append(timeoutTasks,taskInfo)}}// 处理超时任务for_,taskInfo:=rangetimeoutTasks{tm.handleTimeout(taskInfo)}}// handleTimeout 处理超时任务func(tm*TimeoutManager)handleTimeout(taskInfo*TaskTimeoutInfo){taskInfo.Status=TimeoutStatusTimeout// 取消上下文iftaskInfo.CancelFunc!=nil{taskInfo.CancelFunc()}// 调用回调函数iftaskInfo.Callback!=nil{gofunc(){iferr:=taskInfo.Callback(taskInfo.TaskID);err!=nil{fmt.Printf("Timeout callback failed for task %s: %v\n",taskInfo.TaskID,err)}}()}</
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 18:01:52

Spring AI Embedding 实战:从语义搜索到商品推荐系统

Spring AI Embedding 实战:从语义搜索到商品推荐系统 关键词:Spring AI / Embedding / 向量数据库 / PGVector / 推荐系统 / RAG 一、什么是 Spring AI Embedding Spring AI 中的 Embedding 技术核心在于将文本、图像等非结构化数据转化为高维向量(即 Embedding)。这些向量…

作者头像 李华
网站建设 2026/3/7 20:05:46

16.1 批量任务调度和心跳优化竟然还能这样做?

16.1 太震撼了!批量任务调度和心跳优化竟然还能这样做? 在分布式任务调度系统中,性能优化是确保系统能够处理大规模任务的关键。今天我们将深入探讨批量任务调度和心跳优化技术,这些技术能够显著提升系统的吞吐量和响应速度。 批量任务调度机制 批量任务调度是提升系统性…

作者头像 李华
网站建设 2026/3/4 2:11:31

java juc 01 进程与线程

进程和线程的概念 并行和并发的概念 线程基本应用ps &#xff1a;随便写写&#xff0c;今天就是开个新章对比维度进程&#xff08;Process&#xff09;线程&#xff08;Thread&#xff09;基本概念程序运行时的一个实例&#xff0c;用来加载指令、管理内存、管理 IO进程内部的一…

作者头像 李华
网站建设 2026/3/6 21:56:12

Ella陈嘉桦「艾拉主意」巡演南宁站两晚连唱 现场嗦粉打造出圈名场面

Ella 陈嘉桦「It’s Me 艾拉主意」巡演继长沙、杭州、广州、上海站后&#xff0c;持续保持场场秒罄、口碑爆棚的火爆势头。2026年2月7日至8日&#xff0c;这场音乐盛宴落地绿城南宁&#xff0c;于广西体育中心体育馆一连两晚盛大开唱。其中2月8日场是整轮巡演中的第十场演出&am…

作者头像 李华
网站建设 2026/3/11 4:18:27

【Django毕设全套源码+文档】基于python的花里有话花店管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/9 1:15:00

基于PHP的宠物商城网站的设计与制作

目录PHP宠物商城网站设计摘要系统架构核心功能模块技术亮点扩展性设计成果目标项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作PHP宠物商城网站设计摘要 系统架构 采用B/S架构&#xff0c;前端使用HTMLCS…

作者头像 李华