# 认证服务: lamp-oauth
主要包括 登录接口、获取用户权限接口、常用数据接口(如前端获取的字典、枚举接口)等接口和功能。
# 租户服务: lamp-tenant
主要包括 租户管理、给租户创建独立数据源(数据源模式)、租户管理员维护、 租户表结构初始化、租户表数据初始化 等功能。
# 权限服务: lamp-authority
主要包括 组织机构管理、岗位管理、租户下的用户管理、系统设置、权限配置等功能。
# 消息服务: lamp-msg
主要包括 站内信(通知、公告、待办、预警)、短信功能、邮件功能(尚未实现) 等。 支持多种第三方短信、多种第三方邮件。
# 文件服务: lamp-file
主要包括 文件存储、文件下载、文件回显等功能。支持多种第三方OSS存储。
# 网关服务: lamp-gateway
主要包括 token解析、用户uri权限拦截、黑白名单、限流等功能。
# 工作流服务 (会员版): lamp-activiti
工作流配置功能
# SpringBootAdmin监控: lamp-monitor
监控功能
# lamp-cloud 目录结构
```
├── 01-docs # 文档
│ ├── activiti # (会员版)工作流模板
│ ├── dockerfile # 常用工具的dockerfile
│ ├── image
│ ├── shells # 运行脚本
│ ├── sql # 数据库脚本
├── 01-third-party # 第三方配置
│ ├── nacos # 项目需要的nacos配置
│ └── seata # 项目需要的seata配置
├── lamp-activiti # (会员版)工作流服务
│ ├── lamp-activiti-biz
│ ├── lamp-activiti-controller
│ ├── lamp-activiti-entity
│ └── lamp-activiti-server
├── lamp-authority # 权限服务
│ ├── lamp-authority-api
│ ├── lamp-authority-biz
│ ├── lamp-authority-controller
│ ├── lamp-authority-entity
│ └── lamp-authority-server
├── lamp-file # 文件服务
│ ├── lamp-file-api
│ ├── lamp-file-biz
│ ├── lamp-file-controller
│ ├── lamp-file-entity
│ └── lamp-file-server
├── lamp-gateway # 网关服务
│ ├── lamp-gateway-biz # (会员版)
│ └── lamp-gateway-server
├── lamp-msg # 消息服务
│ ├── lamp-msg-api
│ ├── lamp-msg-biz
│ ├── lamp-msg-controller
│ ├── lamp-msg-entity
│ ├── lamp-msg-server
│ ├── lamp-sms-biz
│ └── lamp-sms-controller
├── lamp-oauth # 认证服务
│ ├── lamp-oauth-api
│ ├── lamp-oauth-biz
│ ├── lamp-oauth-controller
│ └── lamp-oauth-server
├── lamp-public # 公共模块
│ ├── lamp-common
│ ├── lamp-common-api
│ ├── lamp-file-sdk
│ ├── lamp-tenant-datasource # (会员版) 数据源模式
│ └── lamp-tenant-datasource-init # (会员版) 数据源模式初始化sdk
├── lamp-support # 支撑服务
│ └── lamp-monitor # spring boot admin 监控
├── lamp-tenant # 租户服务
│ ├── lamp-tenant-biz
│ ├── lamp-tenant-controller
│ ├── lamp-tenant-entity
│ └── lamp-tenant-server
└── src
└── main
└── filters
└── config-dev.properties # 开发环境全局配置
└── config-prod.properties # 生产环境全局配置
```
# 项目结构介绍
- lamp_cloud
![](https://img.kancloud.cn/b6/f2/b6f28afe5d659e1ed9d488060e667fad_722x1063.png)
# 概念声明
1. 层:
- API层: 包含lamp-authority-api、lamp-file-api、lamp-msg-api 、lamp-oauth-api 等模块
- 业务层:包含lamp-authority-biz、lamp-tenant-biz、lamp-file-biz、lamp-msg-biz 、lamp-sms-biz、lamp-oauth-biz等模块
- 控制层:包含lamp-authority-controller、lamp-tenant-controller、lamp-file-controller、lamp-msg-controller 、lamp-sms-controller、lamp-oauth-controller等模块
- 实体层:包含lamp-authority-entity、lamp-tenant-entity、lamp-file-entity、lamp-msg-entity 、lamp-sms-entity等模块
- 启动层:包含lamp-authority-server、lamp-tenant-server、lamp-file-server、lamp-msg-server 、lamp-sms-server、lamp-oauth-server等模块
2. 模块: (模块和层可以混着说, 知道团队的人懂即可)
- lamp-util 项目下的每个包. 如 lamp-core、 lamp-cloud-starter
- lamp-cloud 项目下的每个包. 如lamp-authority-api、lamp-common等
- lamp-boot 项目下的每个包. 如lamp-authority-server、lamp-common等
3. 服务:
- 认证服务:lamp-oauth下的所有模块组成权限服务
- 租户服务:lamp-tenant下的所有模块组成租户服务
- 权限服务:lamp-authority下的所有模块组成权限服务
- 文件服务:lamp-file下的所有模块组成文件服务
- 网关服务:lamp-gateway下的所有模块组成网关服务
- 消息服务:lamp-msg下的所有模块组成消息服务
- 监控服务:lamp-monitor
4. lamp-public 目录下存放 业务服务公共模块和收费的插件 :
- lamp-common 模块用于存放跟大多数服务有关的常量类和工具类等
- lamp-common-api 模块公共api层
- lamp-tenant-datasource (会员版): DATASOURCE模式的实现类
- lamp-tenant-datasource-init (会员版) : DATASOURCE模式的初始化数据源模块,用于业务服务启动时,初始化租户数据源
- lamp-file-sdk: 附件sdk,用于业务服务保存和查询业务附件信息
总结: 一个服务可以包含多个模块,一个模块可以包含多个层。
比如:权限服务包含 租户模块和权限模块, 权限模块包含api层、业务层、控制层、实体层、启动层, 但租户模块没有api层和启动层, 因为租户模块是依赖权限模块的用户相关接口的,若独立成租户服务,会涉及跨服务访问,故合并成一个服务。
# 疑问🤔️
都已经是微服务项目了, 为什么还要将项目按模块拆封得如此细?
1. 受到原来项目的“影响“, 已经习惯了将一个大项目按照功能拆封成多个模块的习惯
2. 按照大功能将代码物理拆分成多个模块后, 强制按照server -> controller -> biz -> entity 层的依赖关系来开发功能
- 可以让项目结构更加清晰, 是典型的低耦合、高内聚体现;
- 可以避免开发水平参差不齐的团队,胡乱添加依赖, 胡乱注入Bean. (只允许: Controller 调用 Service, Service调用Mapper)
3. 当某个项目不需要功能时(如没有站内信、没有短信发送、没有操作日志等), 按模块拆分的短信和站内信可以很轻松的在消息服务排除或者删除这2个功能, 而想要排除操作日志功能,必须得在权限服务一个类一个类的删除或注释, 异常的麻烦.
# 服务拆分模块建议
原则上推荐一个服务最好包含5个模块(api模块、entity模块、biz模块、controller层、server层), 但任何事情都不是绝对的,具体怎么分模块可以根据业务自身情况来定.
如: 消息服务希望将站内消息、短信、邮件等相关等逻辑集成到消息服务, 这几个功能既有独立性, 做得更细一些,甚至可以将站内消息、短信、邮件等功能独立成单独的服务, 但这务必会增加系统部署开销, 所以综合考虑, 将站内消息、短信、邮件等功能按模块开发,然后组合成一个服务, 即降低了部署等成本,也将每个功能独立出来,方便日后独立成单独的服务和禁用某些功能.
# API层 说明:
服务于服务之间互相访问时,通过api模块来调用。api 模块实际上就是通过声明式FeignClient实现的接口,B服务调用A服务的UserApi接口时,FeignClient将该次调用封装成Http请求, 最后访问的是A服务的 Contoller层接口。
# 业务层 说明:
主要存放Servce接口及实现,Redis操作类、Mapper接口以及Xml(resources目录下)。
约定如下:
> AService 能注入BServce,但禁止直接或间接循环注入。如AService -> BService ,BService->AService
> 在Service 层封装 业务逻辑, 操作缓存接口、Mapper接口的操作
# 实体层 说明:
存放实体po、文件传输对象DTO(本项目忽略VO)、枚举类型等,不涉及逻辑的一些类。
# 控制层说明:
主要存放一些服务的 Contrller 接口, 用于对外访问。
约定如下:
> Controller 不能互相注入调用(我不说,真有人这么干!)
> Controller 只能调用Service,禁止调用Mapper(Dao)
> Controller 主要负责参数验证、转换等操作,尽量别写业务代码
# 启动层说明:
主要存放一些服务所需的启动类、配置类、配置文件、消息队列消费方监听入口等
# 每个层的依赖关系:
每个服务一般情况下都包含5个层: server、controller、biz、entity、api (特殊情况可以删减一些),他们的依赖依赖关系为: `server -> controller -> biz -> entity` ,api层独立,用于其他服务依赖。
# lamp-cloud项目模块依赖图 (图片适用于3.0+版本)
![](https://img.kancloud.cn/ef/5d/ef5d29939cda16d41f7d505b040149a4_1623x741.png)
# 调用流程(lamp-cloud)
![](https://img.kancloud.cn/4c/29/4c2997ae5606eb5c40638a07441eb0c7_3062x961.jpg)
- 简介
- 会员版
- 3.x和4.x的区别
- 新手必读
- 如何高效提问
- 项目地址
- 项目截图
- 架构介绍
- 开发规范
- 租户模式介绍
- lamp-web和lamp-web-plus的区别
- lamp-cloud和lamp-boot区别
- 免费视频&软件下载
- 文档反馈
- lamp-cloud
- 服务介绍
- 环境要求
- 工程导入
- nacos启动(单机版)
- nacos启动(集群版)
- 将配置文件导入Nacos
- seata启动(单机版)
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式
- NONE模式
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- lamp-boot
- 环境要求
- 工程导入
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式启动
- NONE模式启动
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- 功能介绍
- 租户设置
- 数据源配置(会员版)
- 租户管理
- 超级用户
- 工作台
- 通知公告
- 组织管理
- 机构管理
- 岗位管理
- 用户管理
- 资源中心
- 消息中心
- 短息模版
- 短信中心
- 附件管理
- 流程管理
- 流程部署
- 模型管理
- 系统设置
- 菜单管理
- 角色管理
- 字典管理
- 地区管理
- 参数管理
- 操作日志
- 登录日志
- 在线用户
- 应用管理
- 网关管理
- 限流规则
- 组织访问
- 开发者管理
- 定时任务
- 接口文档
- Nacos
- 服务监控
- 数据库监控
- 缓存监控
- zipkin监控
- SkyWalking监控
- 常用配置
- 如何保证我的代码能更新到最新代码
- 序列化和反序列化
- 修改日志级别
- 文件上传&下载&预览
- 修改租户模式
- 分页
- 导入导出
- 请求放行(忽略token&忽略URI权限&忽略租户编码)
- 异常处理
- 全局返回
- 参数校验(会员版)
- 系统日志
- 自研权限认证(URI、按钮、菜单)
- 数据权限(旧)
- 数据库配置
- Mybatis配置
- 更多数据库/数据源/Mybaits配置
- Redis(缓存)配置
- RabbitMq配置
- 灰度发布
- 上手开发
- 表结构整理
- 项目结构&依赖&调用流程介绍
- 生成一个新服务
- 生成后端代码
- 生成前端lamp-web代码
- 生成前端项目lamp-web-plus代码
- 跨域处理
- Swagger文档调试技巧
- FeignClient接口调用
- 多租户实现原理
- 分布式事务
- Zipkin配置(过时)
- SkyWalking配置
- 代码生成器和自动回显组件使用介绍
- lamp-util原理解析
- 全局注解(lamp-annotation)
- 核心包(lamp-core)
- 自动回显(lamp-echo-starter)
- 权限控制(lamp-security-starter)
- 当前登录用户信息(lamp-jwt-starter)
- 缓存(lamp-cache-starter)
- SpringBoot全局配置(lamp-boot-util)
- SpringCloud全局配置(lamp-cloud-starter)
- 数据源&持久层配置(lamp-databases)
- 对象属性复制(lamp-dozer-starter)
- 操作日志(lamp-log-starter)
- 消息队列(lamp-mq-starter)
- 在线文档(lamp-swagger2-starter)
- 前后端表单统一验证(lamp-validator-starter)
- 防止Xss攻击(lamp-xss-starter)
- 生产部署
- 部署前言
- jar部署