记录一次责任链设计模式使用低级错误
背景
- 提供一个服务支持语音转写成文本,以及历史转写备份数据的简单服务。
- 提供一个接口批量上传,一次最大1000条(分表) 落库之后 同时发送到消息队列 并更新数据状态
- 消费者一条条消费,并调用底层转写服务。等待回调
流程
- 提交转写 使用责任链模式,进行语音下载 转码 生成波形图,提交转写
- 回调 也使用了责任链模式,回调记录结果 并通知上层。
- 本身也有使用threadLocal 进行透传参数
发现问题
- 两者都使用了责任链模式,并借助spring IOC 注入能力 按顺序循环调用每个handle。
- Spring IOC Bean 默认都是单例的,那么提交转写因为是从队列1条条消费,使用了类的私有变量只要每次流程都更新了 就不会出现问题
- 但是回调 底层是并发回调,那么问题出现了,导致多条数据 类的私有变量 信息错乱。
解决方案
- 原型,那么需要改动责任链启动方式
- 把变量放到threadLocal 这个需要记得使用完清理掉
总结
- 考虑每个业务的使用场景 不要盲目套用设计模式。
- 得亏自测发现了,要不提交测试丢人呀。低级错误 眼高手低 笨蛋一个。加油
posted @
2024-04-25 11:47
贺艳峰
阅读(
13)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具