# 認證服務: 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

# 概念聲明
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+版本)

# 調用流程(lamp-cloud)

- 簡介
- 會員版
- 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部署