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

【微服务】微服务框架模板项目,第1张

marion-micro 我的社交资料
  • B站UP账号:后端研发Marion
  • 今日头条账号:后端研发Marion
  • CSDN账号:后台研发Marion
  • 微信公众号:【后端研发Marion】加微信进JAVA技术交流群
微信公众号微信群(备注:加群)
【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部署

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存