HZERO源码探究
根据官方开源入口项目,可以看到HZERO开源代码分成了多个git项目,总体感觉看起来比较多比较杂。但仔细看了说明后也感觉比较有条理,每种类型的代码做到了切割,便于协调维护,下面我们就来具体看一下,其中对于使用平台而言,重点关注前端应用
和后端微服务
,其他的都是对微服务的拓展性、易用性等的增强。
开源代码结构
整体来讲,大的方面分为5大块:前端应用、后端微服务、微服务插件、微服务客户端、开发组件等。下面具体来看一下主要的内容:
前端应用
- hzero-front - 前后端分离架构下的默认前端应用【重点关注】
后端微服务
从命名上来看,是以hzero-*
的形式,此种类型项目的代码是重点需要关注的,它是能够运行的微服务单元,下面结合着官方资料对各个微服务进行简单的说明:
-
hzero-register - 基于Eureka的平台注册中心服务,包括服务注册发现,服务健康检查,服务监控,注册中心其他功能。【默认注册中心,可使用nacos等代替】
-
hzero-config - 配置服务作为配置中心,为微服务体系中的其他服务提供配置存储、配置推送的服务。基于数据库的实现存储,可以管理大数据量的配置,并且有更快捷的配置推送方式。【默认配置中心,非必须组件,可使用nacos等代替】
-
hzero-gateway - 网关服务,基于Spring Cloud Gateway进行二次封装,作为平台统一的对外出入口,主要有服务路由、鉴权、流量控制等管理功能。
-
hzero-oauth - 基于 Spring Security、Spring OAuth2、JWT 实现的统一认证服务中心,登录基于 spring security 的标准登录流程。同时还支持基于 Spring Social 的三方账号登录方式,如微信/QQ、支付宝、微博等,并提供拓展模式,支持更多三方渠道。【统一认证中心】
-- 通过hzero-starter-social-parent拓展三方登录适配模式
-- 通过hzero-template-parent - 拓展统一认证服务的页面模板 -
hzero-swagger - 用于对平台开发测试的API文档进行管理以及接口调试【非必须组件,可直接使用API测试功能代替】
-
hzero-admin - 平台治理服务,基础服务之一,把路由、限流、熔断等功能易用化,集中在管理服务来管控,提供自动化的路由刷新、权限刷新、swagger信息刷新服务,提供界面化的服务、配置、路由、限流、熔断管理功能。
-
hzero-platform - 平台基础功能服务,主要包含系统基础设置,如:系统配置、配置管理等;开发管理,如:值集管理、多语言配置、数据源管理等。
-
hzero-iam - 权限管理服务,平台统一的权限体系架构,用于管理角色、菜单、子账户等。
-
hzero-file - 文件管理服务,提供简单易用的文件存储功能,具备对接多种云对象存储服务的能力且易于拓展,同时支持服务器ftp协议文件上传,支持大文件断点续传。配套onlyoffice可实现文件预览、word在线编辑、pdf水印等功能。
-- 通过hzero-starter-file-parent拓展文件存储适配,目前支持minio、ceph、阿里云、百度云、AWS等 -
hzero-message - 消息管理服务,支持短信、邮箱、企业微信、钉钉、电话语音、Webhook、站内消息发送,并能够灵活管理消息模板和对接云平台支持的微服务。
-- 通过hzero-starter-sms-parent拓展短信渠道适配,目前支持阿里云、百度云、腾讯云
-- 通过hzero-starter-call-parent拓展语音消息渠道适配,目前支持京东云 -
hzero-scheduler - 分布式调度服务-Quartz服务端负责任务调度,任务的执行由执行器来完成。该服务具体包含执行器管理、并发任务管理、日志管理以及并发请求等。
-
hzero-report - 报表服务,通过配置数据集,执行SQL或者查询URL,获取数据以渲染平面报表、单据报表、图形报表的服务。
-
hzero-import - 通用导入服务,支持Excel、csv数据导入,支持自定义渲染Excel模板,自定义数据校验,自定义数据导入。Excel读取永远不会内存溢出。
服务插件
- hzero-plugin-parent - 服务可插拔功能,针对服务可插拔功能统一进行管理,服务需要用到时通过POM依赖的方式进行部署。【通过插件的方式实现服务功能的可插拔】
- hzero-gateway-helper - 网关鉴权,多种鉴权组件,在不同网关使用的场景下可选择不同的插件
服务客户端
从命名上来看,是以hzero-boot-*
的形式,微服务可直接使用这种组件,实现与对应服务的交互,下面是服务客户端的父项目:
-
hzero-boot-parent - 服务客户端,针对平台使用频率较高的功能从相应服务中抽取出客户端组件,便于服务中使用和统一维护,服务中需调用时仅需引入相应客户端依赖并注入对应的客户端入口类即可。例如,在服务中需使用值集相关的API则直接引入平台服务客户端组件依赖并注入值集客户端入口类即可。【平台各个服务能力暴露,便于基于平台二次开发】
目前主要开源的客户端有:
平台治理客户端:hzero-boot-admin
消息管理客户端:hzero-boot-message
通用导入客户端:hzero-boot-import
平台基础客户端:hzero-boot-platform
调度执行器客户端:hzero-boot-scheduler
文件管理客户端:hzero-boot-file
身份权限管理客户端:hzero-boot-iam
OAuth客户端组件:hzero-boot-oauth
报表客户端:hzero-boot-report
通用开发组件
从命名上来看,是以hzero-starter-*
的形式,微服务可直接使用这种组件,使用提供功能和封装进行代码开发,此种类型的组件可脱离HZERO平台,应用到其他的基于Spring Boot的应用中去,下面是通用开发组件的父项目:
-
hzero-starter-parent - 通用开发组件,主要提供了HZERO服务内部的一些基础能力,包含通用mapper组件、通用redis工具组件、动态JDBC组件、SQL解析器组件等。【开发过程中的常用工具封装】
目前主要开源的组件有:
辅助开发核心包:hzero-starter-core
redis开发帮助组件:hzero-starter-redis
Mybatis增强组件:hzero-starter-mybatis-mapper
数据导出组件:hzero-starter-export
长连接组件:hzero-starter-websocket
分布式锁组件:hzero-starter-lock
注册中心事件监听:hzero-starter-register-event
Feign与本地调用切换组件:hzero-starter-local-feign
Feign调用授权组件:hzero-starter-feign-replay
Apollo客户端组件:hzero-starter-apollo-config
Metric信息收集组件:hzero-starter-metric
配置中心客户端:hzero-starter-config-client
JDBC封装组件:hzero-starter-jdbc
Excel操作组件:hzero-starter-excel
文件分片组件:hzero-starter-fragment
SQL解析器组件:hzero-starter-sqlparser
主键加密组件:hzero-starter-keyencrypt
Seata开发组件:hzero-starter-seata
其他重要项目
- hzero-resource - 平台资源项目,主要提供了HZERO平台安装或升级的数据库对象、种子数据等资源,其中数据库对象采用lquibase管理、种子数据采用Excel管理
本文档资料主要来源于HZERO官方文档,了解详情请可直接访问HZERO开源入口项目