【微服务】微服务框架模板项目

marion-micro

我的社交资料

  • B站UP账号:后端研发Marion
  • 今日头条账号:后端研发Marion
  • CSDN账号:后台研发Marion
  • 微信公众号:【后端研发Marion】加微信进JAVA技术交流群
微信公众号 微信群(备注:加群)
【微服务】微服务框架模板项目_第1张图片 【微服务】微服务框架模板项目_第2张图片

【Marion-Micro】

微服务模版框架

一、目标

1. 作为传统单体服务改造成微服务架构的模板项目

2. 参考目前主流的模板项目开发

3. 技术栈全面可插拔式引入网关、RPC、服务注册发现、链路追踪、ELK、监控告警、定时任务等

4. 多模块开发,领域驱动设计、设计模式

二、技术选型

1. 开发语言:JAVA / JDK11

2. 数据库:MySQL | Redis | ElasticSearch

3. 开发框架:SpringBoot

4. 开发工具:Gradle/Maven私服

5. 项目部署:Docker/Jinkens/K8s

6. 开源组件:SpringCloud Gateway | OpenFeign | Nacos | Apollo | Sentinel | Sleuth + Zipkin | ELK | XXL-Job | Kafka

7. 性能压测:Jemter | 全链路压测

三、项目结构

技术栈

    1. maven
    1. gitee

1. 目录设计

  • 父模块定义

      1. 子模块定义
      1. 公用依赖和版本控制
        1. springboot版本
        • 2.2.2.RELEASE
        1. lombok版本
        • 1.8.22
        1. mysql驱动版本
        • 8.0.21
        1. JPA版本或者Mybatis-Plus
        • JPA-2.2.2.RELEASE
        1. redis版本
        • 2.2.2.RELEASE
        1. spring-cloud版本
        • Hoxton.SR1
        1. nacos注册中心版本
        • 2.2.1.RELEASE
        1. nacos配置中心版本
        • 2.2.1.RELEASE
      1. 微服务端口定义
        1. gatway:10000
        1. amin: 10010
        1. app: 10020
        1. web: 10030
    1. 公用模块-common
      1. 目的
      • 管理每一个微服务公用的依赖、工具类、错误类、常量、验证错误,方便定位错误项目以及减少工具类的复制粘贴,微服务之间的RPC接口
      1. 依赖
        1. 父子模块依赖如何定义
        1. 父模块定义统一版本,子模块不需要声明版本
        1. 子模块定义
        1. 定义微服务公用的依赖
      1. 子目录
        1. RPC接口
        1. 工具类
        1. 错误类
        1. RPC接口类
      1. 优缺点
        1. 优点:统一管理
        1. 缺点:修改需要更新版本
    1. 核心模块-core
      1. 目的
        1. 参考Spring-Core设计思路,IO操作、反射操作
        1. 只有部分微服务项目依赖
      1. 子目录
      • 核心工具类

          1. 分布式ID
          1. 加解密算法
          1. Jwt令牌
      1. 优缺点
        1. 优点:代码复用
        1. 缺点:新增需要发包,其他包可能不需要
    1. 网关模块-gateway
      1. 目的
        1. 鉴权、限流、负载均衡、统一入口、服务注册发现
        1. 技术选型-SpringCloud Gateway
      1. 问题
        1. 启动依赖报错问题,解决不兼容问题
      1. 依赖说明

         Hoxton.SR1
         2.2.2.RELEASE
        
      1. 集成nacos注册中心与配置中心
        1. 注册中心
          1. 添加依赖
          1. 在 application.properties 中配置 Nacos server 的地址
          • server.port=8070
          • spring.application.name=service-provider
          • spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
          1. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
        1. 配置中心
        • web和webflux不能一起使用

          1. 添加依赖
          1. 配置nacos sever地址
          1. 定义配置名称
          1. @RefreshScope实现配置自动更新
          1. 测试配置是否生效
            1. 定义controller
            1. curl -X POST “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true”
          1. 定义环境local/dev/prod
      1. 测试路由转发
        1. 转发报错:java.lang.NoClassDefFoundError: reactor/util/retry/Retry
        • Hoxton.SR1和2.2.2
      1. 定义路由转发规则
        1. /admin -> marion-micro-admin
    1. 后台管理-admin
      1. 目的
        1. 前后端分离的后台管理项目Vue开发
      1. 依赖说明
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web mysql mysql-connector-java org.springframework.boot spring-boot-starter-data-jpa com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.boot spring-boot-starter-test test
- 3. 定义数据库连接和接口
- 4. 引入common模块和core模块,取消多余模块
    1. App接口-app
      1. 目的
        1. 提供给APP端接口
        1. 该模块可以拆分成多个微服务模块替换-api
      1. 依赖说明
    1. Web接口-web
      1. 目的
        1. 提供给Web端接口
      1. 依赖说明
    1. 公用模块
      1. 短信模块-sms
      1. 搜索模块-search
      1. 公用三方服务-third-party

2. 项目新建

    1. 新建springboot多模块项目,定义父子模块

3. 依赖管理

    1. 接入OpenFeign负载均衡
      1. web请求admin
      • rpc请求错误:Could not extract response

        1. 加入依赖
        1. @EnableFeignClients
        1. 返回String成功
        1. 请求测试
        • curl http://localhost:10030/rpc/user
        • curl http://localhost:10030/rpc/user/vo
        1. 测试服务注册发现
          1. 赋值一个admin启动10011
          1. 停止10011
      1. 接入降级
    1. 接入Redis
      1. 测试Redis
      • curl http://localhost:10030/redis/set?key=user&val=1
      • curl http://localhost:10030/redis/get?key=user
    1. 接入链路追踪
      1. 加入依赖
      1. 启动zipkin
      1. 配置yml
      1. 定义日志
      1. 持久化到MySQL
    1. 接入Kafka消息中间件
    1. 接入ELK,做日志系统
    1. 接入Prometheus+Grafana监控告警
    1. 接入xxl-job分布式定时任务框架

四、代码设计

1. 全局异常定义与捕获,定义公共错误返回

    1. @RestControllerAdvice
      1. SpringBoot全局异常,返回JSON数据
    1. @ExceptionHandler
    1. 定义错误类ResponseException
    1. 自定义异常extends RuntimeException
    1. 定义400错误返回,200正常返回
    1. Junit5单元测试和MockMvc测试接口
      1. SpringBoot 测试及 MockMvc的使用

2. 整合swagger接口文档

  • 【CSDN】java集成Swagger的详细步骤

  • 总结错误 No mapping for GET /swagger-ui.html

  • 什么是swagger,一篇带你入门

3. 配置线程池,异步线程池

  • 【CSDN】springboot配置多个线程池

  • SpringBoot 线程池 配置使用

    1. @EnableAsync
    1. 创建ThreadPoolTaskExecutor
    1. 线程池调优

4. 数据主从配置,Durid数据库连接池配置与监控

  • 【github】Druid Spring Boot Starter

  • maven配置阿里云镜像的两种方式

  • druid监控配置

5. 数据库操作工具类,查询分页类公共库封装

6. 整理Kafka消息中间件

  • 【CSDN】Springboot整合kafka

    1. kafka启动命令
    • zookeeper-server-start -daemon /opt/homebrew/etc/kafka/zookeeper.properties & kafka-server-start /opt/homebrew/etc/kafka/server.properties
    1. kafka控制台创建topic
    • kafka 命令行命令大全

      1. 查看topic
      • kafka-topics --bootstrap-server :9092 topic --list
      1. 创建topic
      • kafka-topics --bootstrap-server :9092 --create --replication-factor 1 --partitions 1 --topic demo
      1. 删除topic

7. 集成sentinel

    1. 参考文档
    • sentinel
    1. 操作流程
      1. 启动sentinel命令:
      • nohup java -server -Xms64m -Xmx256m -Dserver.port=8849 -Dcsp.sentinel.dashboard.server=localhost:8849 -Dproject.name=sentinel-dashboard -jar /opt/www/spring-cloud-alibaba/sentinel-dashboard/sentinel-dashboard-1.8.0.jar &
      1. 引入pom
      1. yml配置
      1. 控制台对接口限流测试
      1. 限流规则持久化

8. 集成Prometheus+Grafana实现监控告警

9. 集成xxl-job

    1. 参考资料
    • XXL-JOB中文文档

    • XXL-JOB的使用(详细教程)

    1. 操作流程
      1. 下载源码
      1. 创建数据库
      1. 启动后台
        1. http://localhost:8000/xxl-job-admin/toLogin
      1. 启动执行器

五、业务设计

1. 微服务模块拆分、领域驱动设计DDD

2. 数据库ER建模,代码生成器

六、数据中台

七、项目部署

1. 测试多模块打包

    1. 子模块不能加
    1. clean and package
    1. 运行测试

2. docker部署

3. 代码发布

    1. 发布到私服
  • 2.发布到Gitee

4. Jinkens部署

5. K8S部署

你可能感兴趣的:(微服务,Spring,Boot,Spring,Cloud,微服务,java,spring,cloud)