从零开始创建微服务项目(非教程向)

创建父级Maven项目

    • spring boot版本
    • 配置相关依赖
      小心:配置了子类一定会用,隐式的,子类无需二次配置
    • 配置版本锁
      配置了子类不一样会用

      创建子类Modle项目

    • 父子互关联
      改parent那行为父类的自己说明
    • 同级相关
      调用方添加依赖即可
    • 删除test和其他不用模块比如启动器和静态资源

创建错误类

    • 枚举错误类
      单纯枚举类 加个标准的getter
    • Josn返回结果类
      只是一个自定义的简单类,实例化时赋值变量message和status
      真实的josn格式是靠mvc框架实现的
    • 自定义运行时错误类
      单纯继承了runtimeException
      有message和code参数
      message用于调用父类的构造函数时赋值message变量
      errorCode单纯是给自定义的errorCode变量赋值
    • exception全局错误处理器类
      @ExceptionHandler通过这个标签配置要主动捕获的异常类 然后没什么特别的
      就和普通的handler方法一样,只不过把业务的调用换成了错误的打印
      把成功的Josn静态方法换成了失败的Josn静态方法 返回的都是josn对象

配置yml

    • 服务器相关:端口
    • mybatis相关:驼峰 二缓
    • knife4j API文档:
    • spring: 配置文件启用

配置dev yml

    • 生产者业务modle需要额外配置mysql数据库连接、 nacos、 生产者还需要Dubbo

配置pom

    • 业务生产者

创建config文件

    • knife4j默认配置cv
    • 同级Modle扫包配置

创建service层

    • 接口:@事务标签
    • impl实现类:@service标签 @Slf4j日志标签

创建controller层

    • 类:@restController @Slf4j日志标签 @RequestMapping全局路径设置 @Api文档名称
    • 方法API文档三剑客 @ApiOperation@ApiOperationSupport@ApiImplicitParam + 请求post/get

配置nacos相关

    • 当然你需要添加依赖

      com.alibaba.cloud
      spring-cloud-starter-alibaba-nacos-discovery
    • 而且需要yml配置
      spring:
      application:
      name: nacos-business # 定义当前服务名称
      cloud:
      nacos:
      discovery:
      server-addr: localhost:8848 # 指定正在运行的Nacos服务器的位置
      sentinel:
      transport:
      dashboard: localhost:8080 # Sentinel仪表台的ip:端口
      port: 8722 # 是localhost的8722 这个端口真正参与当前项目的限流措施

cart业务开发:

    • 其他内容:pom父子相认/添加依赖,修改yml配置文件 参考上文
    • 例外: 作为cart业务 必须要pom添加mybatis依赖和配置config文件 注意扫包路径的修改
      knif4j api文档:调整业务handler扫包路径 非常重要!
      knif4j api文档: 次要 主机名 组名 描述 简介
      mybatis :mapper包的扫描路径
    • 业务三层: mapper持久层, service服务层, handler业务层 本地test文档test略过
    • 错误:
      未开启nacos将导致knife4j api无法启动 空指针异常

Dubbo

  • 快速上手
    1. 消费者想要调用生产者的功能模块或者方法就需要提前引入这个方法和模块
    2. 默认的pom依赖引入将会导入大量不必要文件
    3. 将生产者拆分为父类下的俩个小modle,一个只包含接口的service modle和一个包含其他功能的webapi modle,service model的pom最小依赖只包含common类因为接口有传入类型
    4. api modle:pom 剪切父类依赖后额外添加dubbo依赖/service modle依赖(逻辑接口),yml配置dubbo配置,
    5. 复制父类文件,修改config mapperConfig/knife4jConfig 1. 配置文件
    6. 去除父类src,test,target
    7. IMPL添加DubboService标签(激活方法到nacos),生产者启动类添加@EnableDubbo,
    8. 启用RPC服务@DubboReferance 自动注入

seata 事务回滚

  • 原理
    1. seata 有TL,带有GlobalTransactional标签方法启动时TL会自动把与之相关的全部数据库操作添加到一个组中,由RL收集各个模块数据库处理结果,若全成功RL通知所有模块提交数据库,若失败就全部按照各种的undolog表回滚。
  • 快速上手
    1. 生产者消费者pom均添加依赖 seata及其seata依赖 config文件配置seata
    2. 生产者不要添加seata的子依赖否则数据库配置找不到报错
    3. 生产者事务发起点impl方法添加@GlobalTransactional 启动事务一致性

Sentiel 限流

  • 快速上手
    1. pom+yml+impl方法上写标签@SentinelResource
    2. 消费者运行服务(注册)后才能被sentiel服务发现,(重要)才能在sentielweb 网页控制设置
    3. @SentinelResource标签需要配置限流的错误方法名,类需要新增错误方法

网关

  • 解释
    1. 安全性,过滤器更安全
    2. 负载均衡,自动分配服务
  • 快速上手
    1. 配置gate 项目 pom + yml 即可
    2. uri 不是 url!
    3. 重启gateway项目
    4. 自动设置代理和主动设置代理url

elasticsearch搜索引擎

  • 解释
    1. 关系型数据库的常规索引不能快速进行模糊查询,使用elasticsearch的倒序分词索引进行查询比较快
  • 快速上手
    1. 无需pom yml
    2. 配置ik中文分词插件
    3. 这玩意没有数据库表取而代之的是数据段?

SpringData

  • 解释
    1. elasticsearch添加数据非常麻烦需要通过Socket套接字,之前是借助tmocat实现的
    2. 借助SpringData可以快速实现批量写入读取elasticsearch的数据
  • 快速上手
    1. 配置pom依赖 和yml
    2. 和普通业务一样也是需要service接口及标准类的pojo。
    3. 不需要impl实现类。
    4. 接口类需要继承ElasticsearchRepository<Item,Long>接口,无需添加额外方法父类即可拥有有常用的elasticsearch服务代码 单写读 多写读

快捷键合集

  • shift + F6 重命名
  • shift + alt + ctrl + c 复制包名
  • ctrl + alt + s 搜索快捷面板
  • inspection + UID = 序列化自定义uuid alt + enter = 插入序列化uuid
  • cmd 文件开头字母 + tab = 快速补全

经验

  • commons是必不可少的,因为错误类,commons也有不少依赖
  • 除了service几乎所有类都有knife4j api依赖
  • 除了service几乎所有类都有nacos/dubbo 来注册服务和远程调用
  • service是依赖最少的
  • 父类容易写掉版本文件只有property文件
  • ym文件没有配置但添加了pom依赖会造成大量warning knife4j一个error
  • mybatis pom添加依赖后是需要进行数据库连接的
  • 应当删除webapi的test