1 完善实名认证功能
1.1 实名认证分布式事务问题
因为需要操作不同数据库的表,加@Transactional(rollbackFor = Exception.class)注解,在现异常时 无法完成分支事务的全部回滚。
CAP定理:C:一致性 A:可用性 P:分区容错 不可避免的问题 —> 得出 CP模式 AP模式
BASE理论: BA: 基本可用 保证核心可用,放弃一部分 S:软状态 允许数据临时不一致 E:最终一致 经过处理,最终数据一致
解决方案:
AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
项目集成seata,作为事务的协调者
1.docker里部署
2.注册到nacos 配置一些文件
3.在参与全局事务的微服务里引入依赖
4.在需要的方法上,加上seata提供的全局事务管理注解 @GlobalTransactional 注解
具体步骤 参考项目集成seata的资料
1.2网关+knife4j实现聚合文档
1.3 扩展 - AI实名认证方案
参考资料,待实现。。。
2 云存储解决方案-阿里云OSS
2.1 阿里云OSS简介
阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中。
参考官网相关的SDK,测试,封装成工具类使用。
设置阿里云通过OSS里图片url路径直接访问(默认访问是下载图片)//不重要可以忽略
配置 : 参考文档把提供好的工具类引入项目中的公用模块内,并开启自动装配,参考文档完成在配置中心nacos的相关配置
使用:微服务中引入的依赖 配置文件添加OSS的共享配置 先 @Autowired 然后 调用该Bean的方法就可以了
3.字媒体管理
3.3素材管理
总体思路 先校验参数,并通过工具类获取自媒体用户ID,判断当前线程是否为登陆用户,再按照业务需求完成功能的实现
3.31 图片上传
准备工作(防止内存数据泄露):
1.在heima-leadnews-model中com.heima.model.threadlocal添加WmThreadLocalUtils类,用于存储自媒体的用户登录信息
2.在wemedia-service自媒体微服务中使用过滤器解析header数据并设置到当前线程中
大致流程:用户上传到oss,后台获取图片访问路径并保存到自媒体库_素材表
请求参数:MultipartFile 是SpringMVC提供简化上传操作的工具类。用@RequestParam 与前端参数名一样时可以省略
注意事项: 1.注入文件上传OSS接口的对象
2.请求信息通过过滤器拦截 保存在了线程里,通过线程工具类获取请求信息
3.判断文件的后缀为图片的格式 (jpg,jpeg,gif,png)
4.文件名需要重新生成(UUID拼接文件后缀生成),防止同名文件被覆盖
4.返回给前端的是域名+文件全路径,后台保存的是文件全路径
BUG:
1.前端无法实现登陆 // 返回结果 封装Map 里的key 与前端的不一致
2. 上传成功后,不增加图片的总数 // 判断条件中参数有误,线程工具类获取到的ID在id属性上
3.32 素材列表加载
大致流程: 根据需求组装查询条件 执行查询 结果封装并返回
操作资源: 自媒体库_素材表
注意事项:前端收藏图片里没有取消按钮,需要把收藏与未被收藏的图片在全部里展示出来
只有收藏状态=1的时候才 加入按收藏状态查询条件
3.33 图片删除
大致流程:校验参数,根据需求做判断,根据图片的访问路径 删除OSS里的图片,再删除数据库中的对应数据
要求:
1 根据素材id删除图片
2 如果当前图片被引用,则不能删除
3.34 图片的收藏与取消
操作资源: 自媒体库_素材表
model工程下定义了一个常量类:0 取消, 1收藏
两个接口一个根据id设置成收藏 一个设置成取消
调用同一个方法就可以
大致流程 校验用户是否登录 , 根据传入的参数查素材表 设置收藏状态。
BUG:前端展示的时候只能收藏,刷新后不可取消收藏
// 解决方法:在素材加载功能里,在 收藏的状态查询条件前 加判断条件,只有在图片被收藏的时候此条件才会生效
面试热点
什么是分布式事务
什么是CAP定理
什么是BASE理论
常见的分布式事务解决方案
SeataAT模式基本流程介绍
项目中分布式事务场景及解决介绍
阿里云对象存储OSS介绍
素材上传流程
自动AI实名认证流程
