项目简介
lion 是基于 Spring Cloud 体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发
项目采用 Gradle 构建,基于 Java 8/11/13、SpringBoot 2.2.6.RELEASE、SpringCloud Hoxton.SR2、Spring Cloud Alibaba 2.2.0.RELEASE、MyBatis Plus 3.3.1 等核心技术体系实现的一套支持云原生的分布式微服务架构,提供 OAuth2/JWT 权限认证、分布式事务、灰度、限流、熔断降级、分布式锁、链路追踪、MQ等功能,支持 Docker 容器化部署、镜像交付、K8S容器编排
组件说明
使用 Nacos 作为服务注册/发现、配置中心
使用 Sentinel 来查看近实时的接口运行状态和调用频率,并用作服务限流、熔断降级等处理,避免了分布式服务之间调用的“雪崩”效应
使用 Seata 作为分布式事务管理,采用AT事务模式自动完成两阶段提交/回滚
使用 Spring Boot Admin 来监控各个独立 Service 的运行状态
使用 Spring Cloud Gateway 作为路由网关服务
使用 Zipkin / SkyWalking 进行查看完整链路追踪信息等
使用 Feign, 做到HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求
项目结构
1 | lion -- 根目录 |
快速开始
获取项目
1 | git clone --depth 1 https://github.com/micyo202/lion.git |
构建工程
1 | ./gradlew -x test clean build |
基础服务
服务 | 版本 | 端口 |
---|---|---|
MySql | 8.0.19 | 3306 |
Redis | 5.0.7 | 6379 |
RabbitMQ | 3.8.2 | 5672 / 15672 |
Nacos | 1.1.4 | 8848 |
Sentinel | 1.7.1 | 8858 |
Seata | 1.0.0 | 8091 |
注:Sentinel 默认端口为 8080,需改为 8858
创建数据库表
创建lion数据库,执行以下脚本,生成用户表、角色表、菜单资源表等
1 | /* |
创建seata数据库,执行以下脚本,生成全局事务表、分支事务表、全局锁表
1 | -- Copyright 2019 Yanzheng (https://github.com/micyo202). All rights reserved. |
创建zipkin数据库,执行以下脚本,生成链路追踪相关表
1 | -- |
参数配置
- 修改 bootstrap.yml 配置文件中的 nacos 服务地址
- 修改 application.yml 配置文件中的 mysql、redis、rabbitmq、sentinel 服务地址及用户名/密码
- 将修改好的 application.yml 放入 nacos 配置管理中心
服务启动
- 本地启动
1 | SERVER_PORT=端口号 \ |
- 容器启动
1 | docker run -d \ |
访问地址
Druid数据源监控:http://ip:port/druid
RESTful APIs文档:http://ip:port/doc.html
开发步骤
- 设计、创建对应的业务数据表
- 运行 CodeGenerator 类的main方法,自动生成业务表对应的 entity、mapper、service、controller 类
- 在生成对应类上编写业务代码即可
示例代码
Feign 服务调用
- XxxFeignClient
1 | /** |
- XxxFeignClientFallback
1 | /** |
- Controller
1 |
|
Ribbon 服务调用
1 |
|
Redis 分布式缓存
1 | /** |
Redisson 分布式锁
1 | /** |
Async 异步线程执行任务
1 |
|
AMQP-RabbitMQ 消息队列
1 |
|
BlockChain 区块链
1 | /** |
File 文件上传/下载
1 | /** |
更多详细内容,请参考项目 lion-demo 模块下相关示例代码