JeeSite Cloud 分布式架构、微服务架构相关文档
# 引言
JeeSite Cloud 具备 JeeSite 4.x and 5.x (opens new window) 的所有功能,是在 JeeSite 4.x and 5.x 基础之上,完成的 Spring Cloud (opens new window) 分布式系统套件的整合。它利用 JeeSite 4.x and 5.x 的开发便利性巧妙地简化了分布式系统开发。
JeeSite Cloud 并没有重复制造轮子,它只是将目前比较成熟的、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
集成阿里优秀组件 Nacos 服务治理与配置中心、集成 Sentinel 流量卫兵;集成 Zipkin 链路追踪;集成 Seata 分布式事务等,详见技术选型章节。
特点:用经典开发模式,开发分布式应用,两个字【简单】,一个字【快】。
源码仓库地址:https://gitee.com/thinkgem/jeesite4-cloud (opens new window) 分离版前端源码仓库:https://gitee.com/thinkgem/jeesite-vue (opens new window)
# 优势(只写别人没有的)
- 在 JeeSite 单应用基础之上,完成的 Cloud 功能,使用经典开发模式,就像开发单应用一样开发分布式应用
- 它提供了微服务模块的代码生成工具,快速生成开发微服务功能,包含微服务的发布和调用接口
- 我们将 api 和 client 合体为一个工程,自动适应自己调用自己 client 的影响,简化工程数量
- 解决 Feign 接口不能多重继承问题,如一些通用操作(增删改查)微服务接口基类实现,这些都不用自己写了
- 统一的授权认证、基础数据微服务,都已经提供查询 client 接口,其他微服务应用模块中可直接获取用户、组织、权限、字典等基础数据。微服务之间调用中,出现的会话及缓存的一致性统一得到解决。
- 如 UserUtils、EmpUtils、EmpUserService、OfficeService 等等众多的基础服务工具类,都可以直接从基础数据的微服务中获取数据,您不必考虑跨 web 服务的数据交互,我们已经帮您做了。
- 微服务组件 Nacos、Sentinel、Zipkin 提供源码方式启动部署,方便开发调试。
- 写一个别人有的,使用柔性事务入侵性小,跨 web 服务的情况,支持单个微服务独立数据库。
- 集成工作流,提供BPM引擎独立的服务,客户端只需调用API,无需加载复杂流程引擎。
- 支持两套前端技术选型实现,全栈版(Bootstrap+Beetl)、分离版(TS+Vue3+Antdv)。
- 其它优势(按 Ctrl + Shift 点击链接):http://jeesite.com/docs/feature/ (opens new window)

# 技术选型
- 分布式系统套件版本:Spring Cloud 2021.0.5 + Alibaba 2021.0.4
- 服务治理注册与发现:Spring Cloud Eureka / Consul / Nacos 2.2
- 分布式统一配置中心:Spring Cloud Config / Nacos 2.2
- 网关路由代理调用:Spring Cloud Gateway (动态网关)
- 声明式服务调用:Spring Cloud OpenFeign
- 客户端负载均衡:Spring Cloud LoadBalancer
- 阿里流量防卫兵:Sentinel 1.8 (限流、熔断降级、负载保护)
- 分布式事务框架:Seata 1.5 (可选组件)
- 分布式链路追踪:Zipkin / SkyWalking (可选组件)
- 工作流引擎框架:Flowable 6.6 (可选组件)
# 子项目介绍
- 服务注册:jeesite-cloud-eureka : http://127.0.0.1:8970 (opens new window)
- 配置中心:jeesite-cloud-config : http://127.0.0.1:8971/project/default (opens new window)
- 服务注册和配置中心 Nacos 版本(推荐) :http://127.0.0.1:8848/nacos/index.html (opens new window)
- 网关路由:jeesite-cloud-gateway : http://127.0.0.1:8980/js/a/login (opens new window)
- 核心模块(统一授权认证服务、平台基础数据服务):
- 核心主项目:jeesite-cloud-module-core : http://127.0.0.1:8981/js (opens new window)
- 客户端项目(提供其它模块调用):jeesite-cloud-module-core-client
- 测试模块1(单表增删改查示例):
- 模块1主项目:jeesite-cloud-module-test1 : http://127.0.0.1:8982/js (opens new window)
- 模块1客户端项目(提供其它模块调用):jeesite-cloud-module-test1-client
- 测试模块2(树表增删改查示例):
- 模块2主项目:jeesite-cloud-module-test2 : http://127.0.0.1:8983/js (opens new window)
- 模块2客户端项目(提供其它模块调用):jeesite-cloud-module-test2-client
- 测试模块3(代码生成的模块和代码生成的增删改查,该模块完全没有手写,全部为生成的):
- 模块3主项目:jeesite-cloud-module-test3 : http://127.0.0.1:8985/js (opens new window)
- 模块3客户端项目(提供其它模块调用):jeesite-cloud-module-test3-client
- 业务流程基础服务(流程引擎服务,客户端只需调用接口,无需加载引擎逻辑):
- 流程主项目:jeesite-cloud-module-bpm : http://127.0.0.1:8990 (opens new window)
- 客户端项目(提供其它模块调用):jeesite-cloud-module-bpm-client
- 分布式事务 Seata 服务(1.5之后新增监控界面,端口7091):
- 服务主项目:jeesite-cloud-module-seata : http://127.0.0.1:7091 (opens new window)
- 客户端项目(提供其它模块调用):jeesite-cloud-module-seata-client
- 熔断限流:jeesite-cloud-sentinel : http://127.0.0.1:9311 (opens new window)
- 链路追踪:jeesite-cloud-zipkin : http://127.0.0.1:9411 (opens new window)
- 解释:主项目为服务提供者、客户端项目为服务消费者
# 快速运行
# 初始化数据库
JeeSite Cloud 版本的数据库与 JeeSite 单机版数据库相同,您可以 下载最新的mysql脚本 (opens new window) 或者使用 init-data.bat(sh) (opens new window) 命令完成初始化(支持多种数据库)。
# 安装 Redis
Redis 是一个缓存数据库,主要用来集中式管理共享会话和系统缓存的,如果您已安装 Redis,可以忽略这个步骤。
由于 Windows 版本的 Redis 安装不太方便,所以我们提供了该版本的安装文件和安装脚本。
下载地址:https://gitee.com/thinkgem/jeesite4-cloud/attach_files (opens new window) 找到 Redis-x64-4.0.2.2.zip
下载文件。
解压 Redis-x64-4.0.2.2.zip
压缩包,运行 service-install.bat
安装 Windows 系统服务。
默认地址:127.0.0.1;默认端口:6379;默认密码:1234,可根据自己需要修改 conf 文件。
# 启动 Nacos 服务
Nacos 致力于帮助您发现、配置和管理微服务。 Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
如果使用 Nacos 就不用部署 jeesite-cloud-eureka
和 jeesite-cloud-config
了。
JeeSite Cloud 提供了 2 种部署方式,您可以下载 jar 也可以 src 方式运行:
jar 方式:
- 下载地址:https://github.com/alibaba/nacos/releases/download/2.1.1/nacos-server-2.1.1.zip (opens new window)
- 解压
nacos-server-2.1.1.zip
压缩包,运行/bin/startup.cmd(sh)
启动服务。
src 方式:
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-nacos 项目。
- 运行 NacosApplication 类的 main 方法,即可启动服务。
配置 mysql 存储:
- 默认情况 Nacos 采用 Derby 数据库,您可以将数据库切换到 MySQL 下。
- 找到 /nacos/src/main/resources/config/nacos-mysql.sql 文件导入数据表。
- 找到 Nacos 的配置文件(application.properties 或 application.yml)如下:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?useSSL=false&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=123456
# 如果是 application.properties 文件,将 key 后的冒号换为等号即可。
2
3
4
5
6
7
8
9
10
11
注意事项
生产环境,请务必修改 application.properties
配置文件中的秘钥,
属性 nacos.core.auth.plugin.nacos.token.secret.key
值,为一个新的秘钥。
支持自定义鉴权:https://nacos.io/zh-cn/docs/v2/plugin/auth-plugin.html (opens new window)
启动完成后:
浏览器访问:http://127.0.0.1:8848/nacos/index.html (opens new window) 用户名密码:nacos
登录后,进入菜单 配置管理 -> 配置列表
点击 导入配置
按钮,选择 /config/src/main/resources/jeesite-cloud-yml.zip
上传文件。
然后编辑 Data Id 为 application.yml
的文件里的 JDBC 和 Redis 信息。
# 启动 Sentinel 服务
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点, 从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-sentinel 项目。
- 运行 SentinelApplication 类的 main 方法,即可启动服务。
浏览器访问:http://127.0.0.1:9311 (opens new window) 用户名密码:sentinel
# 启动 Zipkin 服务
Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向 Zipkin 报告计时数据,Zipkin会根据调用关系通过 Zipkin UI 生成依赖关系图。
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-zipkin 项目。
- 运行 ZipkinApplication 类的 main 方法,即可启动服务。
浏览器访问:http://127.0.0.1:9411 (opens new window)
如果使用 SkyWalking,安装文档见:https://jeesite.com/docs/skywalking/ (opens new window)
# 启动微服务项目
- 在每个微服务中可以找的
config/bootstrap.yml
配置服务注册和配置中心地址。 - 按顺序运行以下启动类的main方法:(因为服务直接有依赖,请启动完成一个再启下一个)
- /jeesite-cloud-gateway/../GatewayApplication.java
- /jeesite-cloud-module-core/../CoreApplication.java
- /jeesite-cloud-module-test1/../Test1Application.java
- /jeesite-cloud-module-test2/../Test2Application.java
- 以上都启动成功后,浏览器访问网关项目地址即可:
- 访问地址:http://127.0.0.1:8980/js (opens new window) 用户名密码: system admin
- 若访问报错,请再等待一会,可能服务未完全启动完成
# 调用实例演示
# 网关代理模块调用
- 代理 test1 模块(单表):http://127.0.0.1:8980/js/a/test1/testData/list (opens new window)
- 控制器位置:/jeesite-cloud-module-test1/../web/TestData1Controller.java
- 代理 test2 模块(树表):http://127.0.0.1:8980/js/a/test2/testTree/list (opens new window)
- 控制器位置:/jeesite-cloud-module-test2/../web/TestTree2Controller.java
# 模块之间互相调用
- test2 模块调用 test1 模块(单表):http://127.0.0.1:8980/js/a/test2/testData/list (opens new window)
- 服务消费者位置:/jeesite-cloud-module-test2/../web/TestData2Controller.java
- 服务提供者位置:/jeesite-cloud-module-test1/../service/TestDataService.java
- test1 模块调用 test2 模块(树表):http://127.0.0.1:8980/js/a/test1/testTree/list (opens new window)
- 服务消费者位置:/jeesite-cloud-module-test1/../web/TestTree1Controller.java
- 服务提供者位置:/jeesite-cloud-module-test2/../service/TestTreeService.java
# 新增微服务工程
# 1、新建模块
1)进入菜单:系统管理 -> 系统设置 -> 模块管理,新建一个模块,填写:
- 模块名称:测试模块
- 模块编码:test3
- 生成基础路径:填写新建模块的根目录
- 代码生成模板:生成微服务模块代码(Cloud)
点击 “保存并生成代码” 按钮,即可完成微服务模块的工程代码新建。
2)新建微服务功能,进入代码生成器功能菜单,生成时选择 Cloud 的代码生成模板即可。
v4.2.2之前版本:
由于之前版本没有微服务模块生成器功能,所以需要参考其它模块。举例新增一个微服务模块模块叫 test3
,该模块的所有映射地址均在 ${adminPath}/test3/**
这个路径下,该模块可以参照 test1
进行,步骤如下:
拷贝 jeesite-cloud-module-test1 项目为 jeesite-cloud-module-test3 文件夹:
1)修改 pom.xml 中的应用名:
<artifactId>jeesite-cloud-module-test1</artifactId>
替换为:
<artifactId>jeesite-cloud-module-test3</artifactId>
2
3
<artifactId>jeesite-cloud-module-test1-client</artifactId>
替换为:
<artifactId>jeesite-cloud-module-test3-client</artifactId>
2
3
2)修改 application.yml 中的应用名:
spring:
application:
name: jeesite-cloud-module-test3
2
3
3)修改 *Client.java 里的应用名:
service.test1 替换为 service.test3
4)修改 *Controller.java 里的映射路径:
${adminPath}/test1 替换为 ${adminPath}/test3
# 2、配置服务参数
在 jeesite-config 或 Nacos 的微服务配置文件 application.yml 中,新增微服务:
# 微服务列表
service:
test3:
name: jeesite-cloud-module-test3
path: ${server.servlet.context-path}
2
3
4
5
# 3、配置网关映射
在 jeesite-cloud-gateway 配置文件中新增网关路由
spring:
cloud:
gateway:
routes:
# 测试模块3
- id: test3
uri: lb://jeesite-cloud-module-test3
predicates:
- Path=/js/a/test3/**,/js/a/jeesite-cloud-module-test3/**,/js/static/modules/test3/**
2
3
4
5
6
7
8
9
注意:新增的配置请放到 core 基础权限模块之上。
# 微服务增删改查
进入 “代码生成器” 菜单,同单机版使用方法,只需在生成代码时,选择 Cloud 版本的生成模板即可。
src 方式:
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-nacos 项目。
- 运行 NacosApplication 类的 main 方法,即可启动服务。
配置 mysql 存储:
- 默认情况 Nacos 采用 Derby 数据库,您可以将数据库切换到 MySQL 下。
- 找到 /nacos/src/main/resources/config/nacos-mysql.sql 文件导入数据表。
- 找到 Nacos 的配置文件(application.properties 或 application.yml)如下:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
# 如果是 application.yml 文件,将 key 后的等号换为冒号即可。
2
3
4
5
6
7
8
9
10
11
启动完成后:
浏览器访问:http://127.0.0.1:8848/nacos/index.html (opens new window) 用户名密码:nacos
登录后,进入菜单 配置管理 -> 配置列表
点击 导入配置
按钮,选择 /config/src/main/resources/jeesite-cloud-yml.zip
上传文件。
然后编辑 Data Id 为 application.yml
的文件里的 JDBC 和 Redis 信息。
常见问题:
- 如果提示
Exception: Fail to init node, please see the logs to find the reason.
错误,一般来自com.alipay.sofa.jraft
包, 可找到alipay-jraft.log
日志文件,分析问题原因。一般重命名%homepath%/nacos
目录即可解决。
# 启动 Sentinel 服务
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点, 从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-sentinel 项目。
- 运行 SentinelApplication 类的 main 方法,即可启动服务。
浏览器访问:http://127.0.0.1:9311 (opens new window) 用户名密码:sentinel
# 启动 Zipkin 服务
Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向 Zipkin 报告计时数据,Zipkin会根据调用关系通过 Zipkin UI 生成依赖关系图。
- 在 Eclipse 或 IDEA 中 找到 jeesite-cloud-zipkin 项目。
- 运行 ZipkinApplication 类的 main 方法,即可启动服务。
浏览器访问:http://127.0.0.1:9411 (opens new window)
# 启动微服务项目
- 在每个微服务中可以找的
config/bootstrap.yml
配置服务注册和配置中心地址。 - 按顺序运行以下启动类的main方法:(因为服务直接有依赖,请启动完成一个再启下一个)
- /jeesite-cloud-gateway/../GatewayApplication.java
- /jeesite-cloud-module-core/../CoreApplication.java
- /jeesite-cloud-module-test1/../Test1Application.java
- /jeesite-cloud-module-test2/../Test2Application.java
- 以上都启动成功后,浏览器访问网关项目地址即可:
- 访问地址:http://127.0.0.1:8980/js (opens new window) 用户名密码: system admin
- 若访问报错,请再等待一会,可能服务未完全启动完成
常见问题:
- 如果提示
获取不到 ${service.core.name} 属性,请检查配置
错误,说明没有从 nacos 或 config 配置中心获取到配置信息。一般有以下原因。1:Nacos 里未导入jeesite-cloud-yml.zip
配置文件;2:如果您自定义了 Nacos 的 Group Name,请于 bootstrap.yml 里的 Group Name 一致;3:如果 Nacos 提示了 yml 读取错误,请在启动参数,配上环境变量 JAVA_OPTS,值为-Dfile.encoding=UTF-8
(不同IDE里的设置方法:Eclipse:Window->Preferences->General->Workspace->Text file encoding->Other->UTF-8;IDEA:File->Settings->Editor->FileEncodings->Project Encodeing->UTF-8)

# 调用实例演示
# 网关代理模块调用
- 代理 test1 模块(单表):http://127.0.0.1:8980/js/a/test1/testData/list (opens new window)
- 控制器位置:/jeesite-cloud-module-test1/../web/TestData1Controller.java
- 代理 test2 模块(树表):http://127.0.0.1:8980/js/a/test2/testTree/list (opens new window)
- 控制器位置:/jeesite-cloud-module-test2/../web/TestTree2Controller.java
# 模块之间互相调用
- test2 模块调用 test1 模块(单表):http://127.0.0.1:8980/js/a/test2/testData/list (opens new window)
- 服务消费者位置:/jeesite-cloud-module-test2/../web/TestData2Controller.java
- 服务提供者位置:/jeesite-cloud-module-test1/../service/TestDataService.java
- test1 模块调用 test2 模块(树表):http://127.0.0.1:8980/js/a/test1/testTree/list (opens new window)
- 服务消费者位置:/jeesite-cloud-module-test1/../web/TestTree1Controller.java
- 服务提供者位置:/jeesite-cloud-module-test2/../service/TestTreeService.java
# 新增微服务工程
# 1、新建模块
1)进入菜单:系统管理 -> 系统设置 -> 模块管理,新建一个模块,填写:
- 模块名称:测试模块
- 模块编码:test3
- 生成基础路径:填写新建模块的根目录
- 代码生成模板:生成微服务模块代码(Cloud)
点击 “保存并生成代码” 按钮,即可完成微服务模块的工程代码新建。
2)新建微服务功能,进入代码生成器功能菜单,生成时选择 Cloud 的代码生成模板即可。
v4.2.2之前版本:
由于之前版本没有微服务模块生成器功能,所以需要参考其它模块。举例新增一个微服务模块模块叫 test3
,该模块的所有映射地址均在 ${adminPath}/test3/**
这个路径下,该模块可以参照 test1
进行,步骤如下:
拷贝 jeesite-cloud-module-test1 项目为 jeesite-cloud-module-test3 文件夹:
1)修改 pom.xml 中的应用名:
<artifactId>jeesite-cloud-module-test1</artifactId>
替换为:
<artifactId>jeesite-cloud-module-test3</artifactId>
2
3
<artifactId>jeesite-cloud-module-test1-client</artifactId>
替换为:
<artifactId>jeesite-cloud-module-test3-client</artifactId>
2
3
2)修改 application.yml 中的应用名:
spring:
application:
name: jeesite-cloud-module-test3
2
3
3)修改 *Client.java 里的应用名:
service.test1 替换为 service.test3
4)修改 *Controller.java 里的映射路径:
${adminPath}/test1 替换为 ${adminPath}/test3
# 2、配置服务参数
在 jeesite-config 或 Nacos 的微服务配置文件 application.yml 中,新增微服务:
# 微服务列表
service:
test3:
name: jeesite-cloud-module-test3
path: ${server.servlet.context-path}
2
3
4
5
# 3、配置网关映射
在 jeesite-cloud-gateway 配置文件中新增网关路由
spring:
cloud:
gateway:
routes:
# 测试模块3
- id: test3
uri: lb://jeesite-cloud-module-test3
predicates:
- Path=/js/a/test3/**,/js/a/jeesite-cloud-module-test3/**,/js/static/modules/test3/**
2
3
4
5
6
7
8
9
注意:新增的配置请放到 core 基础权限模块之上。
# 微服务增删改查
进入 “代码生成器” 菜单,同单机版使用方法,只需在生成代码时,选择 Cloud 版本的生成模板即可。