我的社交资料
微信公众号 | 微信群(备注:加群) |
---|
| |
【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. 目录设计
-
父模块定义
-
- 子模块定义
-
- 公用依赖和版本控制
-
- springboot版本
-
- lombok版本
-
- mysql驱动版本
-
- JPA版本或者Mybatis-Plus
-
- redis版本
-
- spring-cloud版本
-
- nacos注册中心版本
-
- nacos配置中心版本
-
- 微服务端口定义
-
- gatway:10000
-
- amin: 10010
-
- app: 10020
-
- web: 10030
-
- 公用模块-common
-
- 目的
- 管理每一个微服务公用的依赖、工具类、错误类、常量、验证错误,方便定位错误项目以及减少工具类的复制粘贴,微服务之间的RPC接口
-
- 依赖
-
- 父子模块依赖如何定义
-
- 父模块定义统一版本,子模块不需要声明版本
-
- 子模块定义
-
- 定义微服务公用的依赖
-
- 子目录
-
- 优缺点
-
- 核心模块-core
-
- 目的
-
- 参考Spring-Core设计思路,IO操作、反射操作
-
- 只有部分微服务项目依赖
-
- 子目录
-
- 优缺点
-
- 优点:代码复用
-
- 缺点:新增需要发包,其他包可能不需要
-
- 网关模块-gateway
-
- 目的
-
- 鉴权、限流、负载均衡、统一入口、服务注册发现
-
- 技术选型-SpringCloud Gateway
-
- 问题
-
-
依赖说明 <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
-
- 集成nacos注册中心与配置中心
-
- 注册中心
-
- 添加依赖
-
- 在 application.properties 中配置 Nacos server 的地址
- server.port=8070
- spring.application.name=service-provider
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
-
- 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
-
- 配置中心
-
web和webflux不能一起使用 -
- 添加依赖
-
- 配置nacos sever地址
-
- 定义配置名称
-
- @RefreshScope实现配置自动更新
-
- 测试配置是否生效
-
- 定义controller
-
- curl -X POST “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true”
-
- 定义环境local/dev/prod
-
- 测试路由转发
-
- 转发报错:java.lang.NoClassDefFoundError: reactor/util/retry/Retry
-
- 定义路由转发规则
-
- /admin -> marion-micro-admin
-
- 后台管理-admin
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模块,取消多余模块
-
- App接口-app
-
- 目的
-
- 提供给APP端接口
-
- 该模块可以拆分成多个微服务模块替换-api
-
- 依赖说明
-
- Web接口-web
-
- 公用模块
-
- 短信模块-sms
-
- 搜索模块-search
-
- 公用三方服务-third-party
2. 项目新建
3. 依赖管理
-
- 接入OpenFeign负载均衡
-
- 接入Redis
-
- 测试Redis
- curl http://localhost:10030/redis/set?key=user&val=1
- curl http://localhost:10030/redis/get?key=user
-
- 接入链路追踪
-
- 加入依赖
-
- 启动zipkin
-
- 配置yml
-
- 定义日志
-
- 持久化到MySQL
-
- 接入Kafka消息中间件
-
- 接入ELK,做日志系统
-
- 接入Prometheus+Grafana监控告警
-
- 接入xxl-job分布式定时任务框架
四、代码设计
1. 全局异常定义与捕获,定义公共错误返回
-
- @RestControllerAdvice
-
- @ExceptionHandler
-
- 定义错误类ResponseException
-
- 自定义异常extends RuntimeException
-
- 定义400错误返回,200正常返回
-
- Junit5单元测试和MockMvc测试接口
-
- SpringBoot 测试及 MockMvc的使用
2. 整合swagger接口文档
3. 配置线程池,异步线程池
-
【CSDN】springboot配置多个线程池 -
SpringBoot 线程池 配置使用 -
- @EnableAsync
-
- 创建ThreadPoolTaskExecutor
-
- 线程池调优
4. 数据主从配置,Durid数据库连接池配置与监控
5. 数据库操作工具类,查询分页类公共库封装
6. 整理Kafka消息中间件
-
【CSDN】Springboot整合kafka -
- kafka启动命令
- zookeeper-server-start -daemon /opt/homebrew/etc/kafka/zookeeper.properties & kafka-server-start /opt/homebrew/etc/kafka/server.properties
-
- kafka控制台创建topic
-
kafka 命令行命令大全 -
- 查看topic
- kafka-topics --bootstrap-server :9092 topic --list
-
- 创建topic
- kafka-topics --bootstrap-server :9092 --create --replication-factor 1 --partitions 1 --topic demo
-
- 删除topic
7. 集成sentinel
-
- 参考文档
-
- 操作流程
-
- 启动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 &
-
- 引入pom
-
- yml配置
-
- 控制台对接口限流测试
-
- 限流规则持久化
8. 集成Prometheus+Grafana实现监控告警
9. 集成xxl-job
-
- 参考资料
-
XXL-JOB中文文档 -
XXL-JOB的使用(详细教程) -
- 操作流程
-
- 下载源码
-
- 创建数据库
-
- 启动后台
-
- http://localhost:8000/xxl-job-admin/toLogin
-
- 启动执行器
五、业务设计
1. 微服务模块拆分、领域驱动设计DDD
2. 数据库ER建模,代码生成器
六、数据中台
七、项目部署
1. 测试多模块打包
-
- 子模块不能加
-
- clean and package
-
- 运行测试
2. docker部署
3. 代码发布
4. Jinkens部署
5. K8S部署
|