首页 > 其他分享 >记录一次责任链设计模式使用低级错误

记录一次责任链设计模式使用低级错误

时间:2024-04-25 11:57:11浏览次数:28  
标签:回调 错误 低级 责任 使用 设计模式 转写

记录一次责任链设计模式使用低级错误

目录

背景

  1. 提供一个服务支持语音转写成文本,以及历史转写备份数据的简单服务。
  2. 提供一个接口批量上传,一次最大1000条(分表) 落库之后 同时发送到消息队列 并更新数据状态
  3. 消费者一条条消费,并调用底层转写服务。等待回调

流程

  1. 提交转写 使用责任链模式,进行语音下载 转码 生成波形图,提交转写
  2. 回调 也使用了责任链模式,回调记录结果 并通知上层。
  3. 本身也有使用threadLocal 进行透传参数

发现问题

  1. 两者都使用了责任链模式,并借助spring IOC 注入能力 按顺序循环调用每个handle。
  2. Spring IOC Bean 默认都是单例的,那么提交转写因为是从队列1条条消费,使用了类的私有变量只要每次流程都更新了 就不会出现问题
  3. 但是回调 底层是并发回调,那么问题出现了,导致多条数据 类的私有变量 信息错乱。

解决方案

  1. 原型,那么需要改动责任链启动方式
  2. 把变量放到threadLocal 这个需要记得使用完清理掉

总结

  • 考虑每个业务的使用场景 不要盲目套用设计模式。
  • 得亏自测发现了,要不提交测试丢人呀。低级错误 眼高手低 笨蛋一个。加油

标签:回调,错误,低级,责任,使用,设计模式,转写
From: https://www.cnblogs.com/heyanfeng/p/18157265

相关文章

  • dotnet 修复 GitHub Action 构建过程提示 NETSDK1127 错误
    本文告诉大家,如何修复GitHubAction构建过程提示errorNETSDK1127:ThetargetingpackMicrosoft.WindowsDesktop.App.WindowsFormsisnotinstalled.Pleaserestoreandtryagain.错误在进行GitHubAction构建时,如果自己的项目是一个旧项目,采用旧的.NETSDK版本,将可......
  • dotnet 已知问题 错误标记 MethodImplOptions.InternalCall 特性参数将会在类型访问之
    本文将记录一个dotnet的已知问题。当自己不小心在方法上不正确标记了MethodImplAttribute特性时,错误选择了MethodImplOptions.InternalCall参数,那将会在运行的过程在,在此类型被访问之前就抛出了System.TypeLoadException异常,错误信息是Internalcallmethodwithnon_NUL......
  • 力扣-645. 错误的集合
    1.题目介绍题目地址(645.错误的集合-力扣(LeetCode))https://leetcode.cn/problems/set-mismatch/题目描述集合s包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合丢失了一个数字并且有一个数字重复。......
  • Visual Studio Code 检测到#include 错误,请更新includepath。已为此翻译单元 禁用波
    以上问题的出现是因为visualstudiocode的环境没有配置好在界面中按ctrl+shft+p输入Cconfiguration选择上图蓝色框 在上面红色框填上正确的路径(如果没有这个路径要在https://sourceforge.net/projects/mingw-w64/下载MinGW,具体操作b站有可以去看看照着下载)因为用的是c......
  • 设计模式-状态模式在Java中的使用示例-信用卡业务系统
    场景在软件系统中,有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将具有不同的行为。为了更好地对这些具有多种状态的对象进行设计,我们可以使用一种被称之为状态模式的设计模式。状态模式用于解决系统中复杂对象的状态转换以及不同状......
  • Linux 输入、输出、错误重定向
    参考https://blog.csdn.net/SW_LCC/article/details/104353386错误重定向为了重定向标准错误,可以指定文件描述符2。grep命令没有找到该文件,缺省地向终端输出了一个错误信息。现在让我们把错误重定向到文件/dev/null中(实际就上是系统的垃圾箱):$grep“trident”missiles2>/d......
  • 关于ESLint: Delete `␍`(prettier/prettier) 错误解决方案(3种)
    1.点击VSCode右下角LF/CRLF然后根据弹窗修改成LF即可2.在.eslintrc.cjs中增加配置"rules":{"prettier/prettier":["error",{"endOfLine":"auto"}]}3.关闭git自动转换这个问题是因为Windows在换行的时候,同时使用了回车符CR和换行符LF,即CRLF;而项目仓库中默认是Linux环......
  • 在windows下使用COSCMD时因Python版本不支持导致报SafeConfigParser不支持的错误
    在Windows下通过pip安装COSCMD后,使用相关命令操作Coscmd时报错,具体看错误信息是:SafeConfigParser不再支持。这是因为本地的python的版本是3.12.2,此版本已经不再支持SafeConfigParser这个类。而CosCmd的源代码是用的SafeConfigParser这个类,所以导致报错。 解决方案:修改C:\Pyth......
  • 对于代码覆盖率,以下说法错误的是:( )
    选项:A、这可以帮助发现是否存在冗余代码B、可以帮助确定代码行是否被完全执行C、可以帮助发现状态机跳转路径是否覆盖D、可以帮助确定功能需求是否完全实现答案:D解析:覆盖率从大的方面分为两类,一类是功能覆盖率(functioncoverage),另一类是代码覆盖率(codecoverage)。其中功......
  • npm 常见错误
    **certificatehasexpired**requesttohttps://registry.npm.taobao.org/failed,reason:certificatehasexpired解决方式//尝试更换镜像源:npmconfigsetregistryhttps://registry.npmmirror.com执行npmconfiggetregistry确认镜像源更换成功,再次尝试npmins......