mirror of
https://gitee.com/nicefold/seewis-cloud-plus.git
synced 2026-10-14 03:52:27 +08:00
Rename Maven modules and directories to seewis-* while preserving Java package paths. Allow Nacos and Logstash settings from environment variables or Maven -D overrides, and include the existing agent documentation updates.
5.6 KiB
5.6 KiB
Cloud 约定
优先参考的代码来源
seewis-api/seewis-api-*/src/main/java/.../api/Remote*Service.javaseewis-api/seewis-api-*/src/main/java/.../api/domain/**seewis-modules/*/src/main/java/.../dubbo/Remote*ServiceImpl.javaseewis-auth/src/main/java/...seewis-gateway/src/main/java/.../filter/**seewis-common/seewis-common-dubbo/**seewis-common/seewis-common-seata/**script/config/nacos/*.yml
服务边界
- 当前项目是 Cloud 拆分结构,服务间能力优先通过
seewis-api-*暴露契约,不要跨模块直接注入对方 mapper、service 或 entity。 seewis-api-*只放远程接口、远程 BO/VO/domain、model、event、mock、stub 等契约对象;不要放业务实现、mapper、controller 或依赖具体业务模块。- 远程接口命名沿用
RemoteXxxService,提供方实现命名沿用RemoteXxxServiceImpl并放在业务模块的dubbo包。 - 远程对象命名沿用
RemoteXxxBo、RemoteXxxVo、RemoteXxx,避免直接把内部 Entity 或内部管理端 VO 暴露成跨服务契约。 - 修改远程接口签名时必须同时检查所有
@DubboReference调用点、@DubboService实现、mock/stub、MapStruct 转换器和编译影响。
Dubbo Provider
- 提供方类通常同时标注
@RequiredArgsConstructor、@Service、@DubboService,并实现seewis-api-*中的RemoteXxxService。 - Provider 内部复用本模块 service/mapper,不绕过本模块已有权限、缓存、校验、事务和转换规则。
- 返回远程 VO/BO 时优先使用已有 convert 接口或
MapstructUtils.convert(...),不要手写重复字段拷贝。 - 批量查询接口遇到空集合时优先返回
List.of()、Map.of()或空字符串,避免无意义远程调用和 SQL。 - 登录、权限、字典、用户、部门、资源、消息、工作流等远程接口要保持稳定,因为它们常被
auth、gateway、workflow、公共 translation/log/service-impl 模块消费。
Dubbo Consumer
- 消费方注入远程服务使用
@DubboReference,字段类型使用seewis-api-*的RemoteXxxService。 - 可选或弱依赖调用按已有写法使用
@DubboReference(mock = "true")或@DubboReference(stub = "true"),并在seewis-api-*中提供RemoteXxxServiceMock/RemoteXxxServiceStub。 - mock 用于服务调用异常后的降级返回,例如返回
null、List.of()、StringUtils.EMPTY;stub 用于本地包裹远程调用并吞掉非关键异常,例如消息推送未开启。 - 列表、翻译、流程候选人、消息推送等场景优先调用批量远程接口,避免在循环中逐条 Dubbo 调用。
- 远程调用失败是否抛出异常要按业务语义决定:登录、权限、注册等关键路径应失败;通知、推送、OSS URL 翻译等弱依赖可降级。
应用与依赖
- 需要 Dubbo provider 或 consumer 的应用启动类保持
@EnableDubbo,模块 pom 检查是否依赖seewis-common-dubbo。 - 跨服务写入需要分布式事务时检查是否依赖
seewis-common-seata,并使用@GlobalTransactional(rollbackFor = Exception.class);单服务本地写入继续使用@Transactional。 common-dubbo.yml是内置配置,注册中心走 Nacos,元数据中心走 Redis;不要直接改内置配置做业务定制,业务环境差异优先通过 Nacos 同名配置覆盖。- 各应用
application.yml通常导入optional:nacos:application-common.yml和optional:nacos:${spring.application.name}.yml,新增应用或配置时保持这个结构。
数据权限与上下文
- Dubbo 消费端存在
DubboDataPermissionFilter,会透传DataPermissionHelper上下文;不要随意删除或绕过数据权限上下文。 - 远程 provider 内部查询仍按本模块 mapper/service 的数据权限规则执行。
- 确实需要系统级写入或登录记录更新时,按现有代码使用
DataPermissionHelper.ignore(...)包裹最小范围。 - 涉及登录用户、租户、客户端、same-token、请求头透传时先查
LoginHelper、Gateway 过滤器和 common-satoken 现有实现。
Gateway 与 Auth
- 认证中心位于
seewis-auth,网关位于seewis-gateway;不要把 token 签发、客户端校验、网关白名单逻辑散落到普通业务模块。 - Gateway 的
AuthFilter负责 Sa-Token 登录校验、客户端 ID 匹配、客户端访问路径/IP 白名单和 actuator Basic Auth。 ForwardAuthFilter负责透传X-Forwarded-Prefix和内部 same-token;新增网关过滤逻辑时注意 filter order 和 actuator 排除。- 网关白名单、路由、鉴权、Nacos metadata 等配置优先放 Nacos 配置文件或已有 properties,不硬编码到业务 controller。
- 业务 controller 仍保留
@SaCheckPermission、@SaCheckRole等权限注解,网关认证不替代业务权限。
Seata 与跨服务副作用
- 同一个请求里同时修改本服务数据库并调用远程服务写入时,优先判断是否需要
@GlobalTransactional。 - 文件上传、头像更新、消息推送、工作流启动/完成等跨服务副作用要区分强一致与可降级副作用。
- 非关键消息推送可采用 stub/mock 降级;关键数据一致性不要用吞异常替代事务或补偿。
自检
- 是否误把内部 Entity/VO 暴露到
seewis-api-*。 - 是否同步修改了远程接口、provider、consumer、mock/stub、转换器和 pom 依赖。
- 是否避免了循环中的逐条 Dubbo 调用。
- 是否检查了
@EnableDubbo、seewis-common-dubbo、seewis-common-seata、Nacos 配置和 Gateway 白名单。 - 是否保留数据权限上下文透传、缓存失效、事务边界和异常语义。