1.问题出现的原因如下:业务场景,业务人员 上传文件 异步解析,文件上传以后,然后上传oss 服务,写入文件记录表,得到文件地址,文件地址之后再发送消息 到 mq 中,消费者消费mq(同一个项目监听) ,拿到文件oss 的url 请求三方接口 ,解析完成。
dev和test 环境中都是 单实例部署, 生产后续才知道 ,数据库有主从 ,且K8s 上容器部署为双实例。
出现的问题是,当文件表写入mysql 库之后,然后发送消息, 消息消费之后,拿到文件链接去改写 文件表中解析状态的时候,没有找到的文件记录表,也就是 在消息产生之后,消息产生产生的那个线程任务中的事物 没有提交或者是因为 读主库中数据 (从库中写 update 此时还没有同步到主库 )导致查询为空。后续优化,事务提交之后才去发送mq消息,ApplicationEventPublisherAware ,后者那种情况,在第一个优化之后,update 的时候,锁定业务主键,直接update操作 业务逐渐,而不是先查 在update(三张关联表,需要第一章文件表查到,解析记录id ,再去解析),或者没有找到记录的时候,做线程等待。