# platform **Repository Path**: bootstrap2table/platform ## Basic Information - **Project Name**: platform - **Description**: 微服务基础中台组件库,其他业务微服务仅需要依赖对应中台组件 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 55 - **Forks**: 14 - **Created**: 2021-10-01 - **Last Updated**: 2025-06-09 ## Categories & Tags **Categories**: distributed-service **Tags**: None ## README # 彩虹微服务中台 #### 介绍 彩虹中台服务基于springCloudAlibaba+SpringCloud+SpringBoot开发的一套微服务集中式组件,为其他业务微服务系统提供一键接入微服务的能力,方便项目管理与维护!  [项目示例](https://gitee.com/bootstrap2table/example/tree/2.2.9.RELEASE)。 #### 中台概述 彩虹中台提供微服务权限和任务集中管理,集成微服务管理可视化组件,为微服务提供一键落地的快速部署方案,感兴趣请联系我!,邮箱:1335157415@qq.com #### 相关链接 [中台控制台](https://gitee.com/bootstrap2table/console)  [彩虹商城](https://gitee.com/bootstrap2table/micro)   [在线示例](http://42.192.3.207:8021/win10-ui/login.html) #### 依赖工具 - 网盘链接:https://pan.baidu.com/s/1eJNDSgKQnp8TEStQ6_oWDg 提取密码: 6666 #### 依赖环境 jdk(1.8/11)+maven3.0+nexus3.9.0+nacos2.1.2+mysql5.7+pgsql-14 #### 版本说明 |彩虹中台|SpringCloud|SpringCloudAlibaba|SpringBoot| |:--|:--:|:--:|--:| |1.0.0.RELEASE|Spring Cloud Hoxton.SR9|2.2.6.RELEASE|2.3.12.RELEASE| |2.0.0.RELEASE|Spring Cloud Hoxton.SR12|2.2.9.RELEASE|2.3.12.RELEASE| |3.0.0.RELEASE|Spring Cloud 2021.0.4|2021.0.4.0|2.6.11| |4.0.0.RELEASE|Spring Cloud 2021.0.5|2021.0.5.0|2.6.13| #### 系统架构 ![系统架构](https://gitee.com/bootstrap2table/platform/raw/master/document/image/system.png "系统架构")
#### 权限设计 ![权限设计](https://gitee.com/bootstrap2table/platform/raw/master/document/image/auth.jpg "系统架构")
#### 技术架构 ● 系统核心框架:SpringCloud.Hoxton.SR12 ● 系统核心框架:SpringCloudAlibaba2.2.9.RELEASE ● 系统核心框架:SpringBoot2.3.12.RELEASE ● 服务配置注册:Nacos2.1.2 ● 服务流量管控:Sentinel1.8.5 ● 事务处理框架:Seata1.5.2 ● 定时任务调度:XxlJob2.3.0 ● 服务链路追踪:SkyWalking8.7.0 ● 数据持久框架:MyBatis-plus3.4.3.4 ● 系统监控插件:SpringBootAdmin2.3.1 ● 时序数据处理:InfluxDb1.8.0 ● 系统缓存处理:Redis5.0.5 ● 分布式业务键:美团Leaf ● 灰度发布组件:Nepxion6.21.0 ● 分布式线程锁:Redisson3.17.2 ● 分布式限流器:Redisson3.17.2 ● 系统消息队列:RocketMq5.1.0 ● 安全授权框架:Oauth2+Jwt ● 对象文件存储:Minio(推荐OSS/S3) ● 接口文档工具:Yapi/Knife4j ● 代码分析插件:SonarQube9.0.1 ● 项目文件服务:Gitlab/Gitea ● 项目文档工具:语雀+Jira(wiki) ● 项目管理工具:禅道/Jira ● EXCEL工具包:EasyExcel3.0.5 #### **项目结构** ``` platform │ ├─framwork 彩虹中台微服务组件 │ │ │ ├─document 彩虹中台初始化文档 │ │ │ ├─dependencies 彩虹中台组件依赖声明 │ │ │ ├─common 彩虹中台微服务公共组件 │ │ ├─common-core 微服务公共核心组件 │ │ ├─common-event 微服务事件总线组件 │ │ ├─common-frame 微服务基础公共依赖 │ │ ├─common-handler 微服务公共拦截组件 │ │ └─common-remote 微服务远程调用组件 │ │ │ └─support 彩虹中台微服务组件增强模块 │ ├─base-support-spring-boot-starter 服务增强公共依赖组件库 │ ├─cache-mongdb-spring-boot-starter Mongdb内存缓存组件模块 │ ├─redis-enhance-spring-boot-starter Redis增强缓存处理模块 │ ├─influxdb-extra-spring-boot-starter Influxdb时序处理模块 │ ├─lock-zookeeper-spring-boot-starter Zookeeper分布式锁块 │ ├─message-notify-spring-boot-starter 通用消息通知处理模块 │ ├─minio-storage-spring-boot-starter Minio分布式存储模块 │ ├─mybatis-extra-spring-boot-starter MybatisPlus增强模块 │ ├─action-printer-spring-boot-starter 服务通用日志处理模块 │ ├─task-compose-spring-boot-starter 任务组合编排处理模块 │ ├─half-message-spring-boot-starter RocketMq半事务模块 │ ├─csrf-defender-spring-boot-starter Csrf安全防御处理模块 │ ├─seata-enhance-spring-boot-starter Seata统一配置的模块 │ ├─gray-selector-spring-boot-starter 版本号负载均衡模块 │ └─xxljob-extra-spring-boot-starter 分布式的任务调度模块 │ ├─dashboard 彩虹中台可视化组件 │ ├─document 中台可视化组件文档 │ ├─visual-authority 微服务后台用户权限维护系统 端口:8000 │ ├─visual-monitor SpringBootAdmin服务监控 端口:8010 │ ├─visual-autocode 微服务Mysql代码的生成工具 端口:8020 │ ├─visual-xxl-job XxlJob分布式任务控制台 端口:8030 │ ├─visual-sentinel sentinel服务熔断器控制台 端口:8040 │ └─visual-codepgsql 微服务Pgsql代码的生成工具 端口:8050 ``` #### 使用示例 Maven引入依赖 ```xml com.rainbow.framework dependencies ${lastestVersion} pom import ``` #### 快速启动 - 1.启动系统之前,请仔细参考中台部分的[doc文档](https://docs.apipost.cn/preview/1add88839cfb5033/9522c14528d7003b),了解系统的信息,快速入门上手使用。 - 2.在顶层的pom.xml配置好,对应的服务参数,先执行mvn versions:set -DnewVersion=1.0.0.RELEASE,在执行mvn -N versions:update-child-modules,最后执行maven clean install打包。 - 3.按照2步骤打包完毕,依次启动对应的中台服务,即可对外提供对应的业务服务。 - 4.中台的微服务接入示例,请参考[用户服务](https://gitee.com/bootstrap2table/micro/tree/master/mall-soft/user-server) #### 注意事项 - #### 1 项目发版时,设置统一版本号可以在顶级pom.xml,在maven中运行:mvn versions:set -DnewVersion=1.0.1-SNAPSHOT,然后mvn -N versions:update-child-modules控制台会打印All child modules are up to date.表示所有版本号已修改,最后执行:mvn:clean install -DskipTests [版本统一更新](https://blog.csdn.net/bluetjs/article/details/90295973) - #### 2 项目发版时,versions-maven-plugin在最顶级POM,从(dev,fat,uat,pro)选择一个profile打包,整个项目会统一打包成对应环境程序 - #### 3 微服务需要在网关接口的header传递对应版本号和clientId还有token,header被Nepxion启动版本灰度发布,clientId鉴权认证服务验证token合法性,当三者满足时,才允许请求通过。 - #### 4 权限管理服务采用[pb_cms](https://gitee.com/bootstrap2table/pb-cms/tree/oauth2),后台配置的微服务系统资源数据,微服务授权登录时,可直接读取权限资源并鉴权处理,可生产环境使用该项目。 - #### 5 微服务权限认证,采用resetTemplate集成loadbanlce方式远程请求,需要跟微服务环境配置在相同的nacos的namespace中便于负载均衡,微服务鉴权auth和gateway放在微服务端,一起部署到相同nacos的namespace - #### 6 部署在线LEAF,微服务集中UUID生成中心,提供号段和雪花两种模式,集中生成对应的业务唯一编号。体验地址为:[leaf](http://106.12.105.21:5555/doc.html) - #### 7 中台采用sentinel作为熔断降级处理方案,微服务代码块需要注意关闭hystrix熔断降级的处理方案,切换到sentinel的模式下的熔断降级处理解决方案。 - #### 8 common-core添加全局自定义参数验证方法,需要个性化验证统一自己写验证处理逻辑,手机号验证代码示例如下:public class PhoneValidHandler extends DefaultValidHandler{} - #### 9 添加i18n国际化支持,common-core里面只是写了部分国际化配置,具体微服务里面需要写自己的国际化配置文件,程序国际化响应以微服务配置为准,国际化参数是在header传递(Accept-Language=zh-CN/en-US)切换中英文。 - #### 10 集成mongdb和influxdb内存缓存和时序数据库支持,配置springBootAdmin集成钉钉机器人,调整springBootAdmin组件代码结构,增加mybatis代码增强组件工具。 - #### 11 提供minio对象存储组件包,线上演示环境可以体验minio简单存储的快捷使用,生产环境建议采用阿里OSS或者亚马逊S3对象存储服务功能,大厂花钱的产品还是靠谱滴 - #### 12 新增message消息通知模块,方便快捷集成与使用,目前支持email和钉钉消息两种通知方式,具体使用示例请参考对应message-notify-spring-boot-starter的readme.md文档说明 - #### 13 mysql数据库的时间戳推荐使用timestamp,不推荐使用datetime。seata1.4.2针对datetime反序列化存在无法解析的问题,同时涉及UTC国际化处理时datetime也不方便,建议使用timestamp。 - #### 14 feign调用时,被调用方出现异常的时候,默认会被全局异常处理掉,此时处理结果向发起方返回时,会提示feign.decode的类型不一致异常,这个属于正常的情况,如果需要正确返回可以自己捕获异常然后返回或者降级处理。 - #### 15 引入数据库文档处理工具screw,方便快速生成数据库的文档结构,建议针对废弃的表和备份表分别采用不同的后缀来区分,比如备份表:as_assets_20220330_bak表示备份表 - #### 16 使用sentinel做服务熔断处理时,接口资源被流控处理时,此时资源会直接被拒绝请求,建议添加degrade方法处理,可以在degrade里面知道熔断了,后续可以显示的抛出异常或者提示处理等。 - #### 17 配置统一valid,方便快捷自定义控制层入参校验,使用@NeedCustomValid(required = true,message = "user.phone.notnull",customHandlerClass = PhoneValidHandler.class)标注在字段上,示例请参考彩虹商城服务; - #### 18 配置统一rocketMq半事务消息处理,消息生产者和消息消费者可快速接入使用,两方只需要关注本地业务处理即可,组件封装了消费者幂等处理逻辑。半事务消息体的JSON字符串中必须含字段{"globalId":"全局事务id","branchId":"分支事务id"},否则系统会报错。 - #### 19 对于延迟处理的方式,在用户服务示例中,已经分别接入rocketMq延迟队列和redis过期时间监听两种方式皆可实现,基于消息可靠性而言建议采用rocketMq的延迟消息方式处理,配合spring-retry模块,可以在延迟消费失败时,优雅重试。 - #### 20 中台封装了统一批量更新处理(拼接多条更新sql,最终每次1000条执行,返回结果1),若需要保证更新数据时,严格一致性(比如:更新一批数据中存在一条更新失败,mybatis更新失败返回0,并不会报错,此种场景下数据不存在导致),避免此问题场景建议更新之前检查好数据,出现不存在抛异常处理。 - #### 21 中台封装了统一批量更新和新增处理,时间格式采用Instant接收,(mysql时间戳到微秒无法直接接收Instant的默认纳秒需要转换成微秒),pgsql可以正常接收处理,框架目前支持mysql和pgsql其他数据库敬请期待............. - #### 22 服务熔断建议采用sentinel方式,在需要降级处理的方法上加上@SentinelResource注解方式来配置对应降级处理逻辑,实例参考用户服务 #### 项目截图 **版本打包:** ![版本更新](https://gitee.com/bootstrap2table/platform/raw/master/document/image/version.png "版本更新成功提示")
**用户服务:** ![用户服务](https://gitee.com/bootstrap2table/platform/raw/master/document/image/user.jpg "用户服务")
**SpringBootAdmin:** ![boot-admin](https://gitee.com/bootstrap2table/platform/raw/master/document/image/admin.jpg "SpringBootAdmin")
**钉钉告警:** ![钉钉告警](https://gitee.com/bootstrap2table/platform/raw/master/document/image/robot.png "钉钉告警")
**Leaf号段:** ![leaf](https://gitee.com/bootstrap2table/platform/raw/master/document/image/leaf.png "leaf")
**sentinel:** ![sentinel](https://gitee.com/bootstrap2table/platform/raw/master/document/image/sentinel.jpg " sentinel")
**xxlJob:** ![xxlJob](https://gitee.com/bootstrap2table/platform/raw/master/document/image/xxlJob.jpg " xxlJob")
**SonarQube:** ![SonarQube](https://gitee.com/bootstrap2table/platform/raw/master/document/image/sonar.png " SonarQube")
#### 加入我们 - #### 钉钉群 钉钉群 微信群微信群