1 完善实名认证功能

1.1seata回顾

1.1.1三个角色

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

image-20210902150935063.png

  • 1.1.2四中分布式事务解决方案:
  • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
  • TCC模式:最终一致的分阶段事务模式,有业务侵入
  • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
  • SAGA模式:长事务模式,有业务侵入、

AT模式的工作原理:

  1. 阶段一RM的工作:
  2. - 注册分支事务
  3. - 记录undo-log(数据快照)
  4. - 执行业务sql并提交
  5. - 报告事务状态
  6. 阶段二提交时RM的工作:
  7. - 删除undo-log即可
  8. 阶段二回滚时RM的工作:
  9. - 根据undo-log恢复数据到更新前

image-20210902144017171.png
项目集成seata:docker容器添加seata;在nacos中添加seataServer.properties配置,在项目模块引入seata依赖;在实名认证方法上添加@CloablTransactional(rallbackFor = Exception.class)注解
1.2网关+knife4j聚合
1.2.2.创建Swagger配置类

  1. @Slf4j
  2. @Component
  3. @Primary
  4. @AllArgsConstructor
  5. public class SwaggerResourceConfig implements SwaggerResourcesProvider {
  6. private final RouteLocator routeLocator;
  7. private final GatewayProperties gatewayProperties;
  8. @Override
  9. public List<SwaggerResource> get() {
  10. List<SwaggerResource> resources = new ArrayList<>();
  11. List<String> routes = new ArrayList<>();
  12. routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
  13. gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(route -> {
  14. route.getPredicates().stream()
  15. .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
  16. .forEach(predicateDefinition -> resources.add(swaggerResource(route.getId(),
  17. predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
  18. .replace("**", "v2/api-docs"))));
  19. });
  20. return resources;
  21. }
  22. private SwaggerResource swaggerResource(String name, String location) {
  23. log.info("name:{},location:{}",name,location);
  24. SwaggerResource swaggerResource = new SwaggerResource();
  25. swaggerResource.setName(name);
  26. swaggerResource.setLocation(location);
  27. swaggerResource.setSwaggerVersion("2.0");
  28. return swaggerResource;
  29. }
  30. }