- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.) - frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts - scripts/: build, test-env, tools (Docker Compose, service templates, API parity) - docs/: AGENTS.md, superpowers specs, architecture docs - .gitignore: standard Java/Maven exclusions Moved from legacy maven-*/ root layout to backend/ organized structure.
10 KiB
Ribbon Dubbo 发现恢复 — 实施计划
TL;DR
Summary: 移除 ElevatorApplication 中两个多余的
@RibbonClient注解,恢复ninca-common-component-organization和ninca-common的 Dubbo/ZooKeeper 动态发现,修复生产Load balancer does not have available server错误。 Deliverables: 1 个修改文件 + 2 个废弃文件,无配置变更,无 DDL。 Effort: Quick Parallel: 可并行(仅 Wave 1) Critical Path: Task 1 → Task 2 → Task 3
Context
Original Request
生产环境 PersonRecordEventHandler 调用 ninca-common-component-organization (Feign/Ribbon) 时报 Load balancer does not have available server。
Root Cause
V2 代码在 ElevatorApplication.java 中为 ninca-common-component-organization 和 ninca-common 额外添加了 @RibbonClient(configuration=ConfigurationBasedServerList) 注解,但生产 application.properties 没有提供 listOfServers。V1 对这两个服务无显式 Ribbon 配置,依赖默认 Ribbon + Dubbo/ZooKeeper 动态发现。
Design Spec
.sisyphus/drafts/2026-05-01-ribbon-dubbo-restore-design.md
Work Objectives
Core Objective
恢复 V1 的 Dubbo 发现路径:只有 ninca-crk-std 使用 ConfigurationBasedServerList,其余两个恢复默认 Ribbon。
Deliverables
ElevatorApplication.java— 删除 2 行@RibbonClientOrgServiceRibbonConfiguration.java— 删除或废弃CommonServiceRibbonConfiguration.java— 删除或废弃
Definition of Done
cd maven-cw-elevator-application && mvn clean install -DskipTests
cd maven-cw-elevator-application && mvn formatter:validate -Dformatter-maven-plugin.version=2.16.0
BUILD SUCCESS + 无格式化违规 = 完成。
Must Have
@RibbonClients注解只保留ninca-crk-std一条OrgServiceRibbonConfiguration和CommonServiceRibbonConfiguration不再被引用- 编译通过
- 格式校验通过
Must NOT Have
- 不动任何配置文件(
application.properties、bootstrap.properties保持不变) - 不动
NincaCrkStdRibbonConfiguration(保留) - 不动 Feign 客户端代码
- 不新增任何 Ribbon 属性
Verification Strategy
ZERO HUMAN INTERVENTION - all verification is agent-executed.
- Test decision: none (no test infra for this module) + QA via build verification
- QA policy: Every task has agent-executed validation via build commands
Execution Strategy
Parallel Execution Waves
Wave 1: Task 1 (edit ElevatorApplication) + Task 2 (deprecate configs) — 独立文件,可并行
Dependency Matrix
| Task | Blocks | Blocked By |
|---|---|---|
| 1. ElevatorApplication edit | — | — |
| 2. Deprecate config classes | — | — |
| 3. Build + format + commit | — | 1, 2 |
TODOs
-
1. 修改 ElevatorApplication.java — 移除多余的 @RibbonClient
What to do: 删除
@RibbonClients中ninca-common-component-organization和ninca-common对应的两行注解。同时删除OrgServiceRibbonConfiguration和CommonServiceRibbonConfiguration的 import 语句。Must NOT do: 不要删除或修改
ninca-crk-std的@RibbonClient行。修改前 (
ElevatorApplication.java:17-21):@RibbonClients({ @org.springframework.cloud.netflix.ribbon.RibbonClient(name = "${feign.ninca-crk-std.name:ninca-crk-std}", configuration = NincaCrkStdRibbonConfiguration.class), @org.springframework.cloud.netflix.ribbon.RibbonClient(name = "${feign.component-organization.name:ninca-common-component-organization}", configuration = OrgServiceRibbonConfiguration.class), @org.springframework.cloud.netflix.ribbon.RibbonClient(name = "${feign.ninca-common.name:ninca-common}", configuration = CommonServiceRibbonConfiguration.class) })修改后:
@RibbonClients({ @org.springframework.cloud.netflix.ribbon.RibbonClient(name = "${feign.ninca-crk-std.name:ninca-crk-std}", configuration = NincaCrkStdRibbonConfiguration.class) })Import 清理: 删除 import 行:
import cn.cloudwalk.ribbon.OrgServiceRibbonConfiguration; import cn.cloudwalk.ribbon.CommonServiceRibbonConfiguration;Recommended Agent Profile:
- Category:
quick— Reason: single file, 4-line deletion only - Skills:
[] - Omitted:
[]
Parallelization: Can Parallel: YES | Wave 1 | Blocks: none | Blocked By: none
References:
- Pattern:
src/main/java/cn/cloudwalk/elevator/ElevatorApplication.java:17-21— current @RibbonClients block to modify - V1 reference: Production
星中心/.../bootstrap.propertiesline 16 (dubbo.registry) — confirms Dubbo-based discovery
Acceptance Criteria:
grep -c "OrgServiceRibbonConfiguration" ElevatorApplication.javareturns 0grep -c "CommonServiceRibbonConfiguration" ElevatorApplication.javareturns 0grep -c "NincaCrkStdRibbonConfiguration" ElevatorApplication.javareturns 1@RibbonClients块只包含 1 条@RibbonClient注解
QA Scenarios:
Scenario: @RibbonClients 只保留 ninca-crk-std Tool: Bash Steps: 1. grep "RibbonClient" ElevatorApplication.java | grep -c "configuration" Expected: 1 (only ninca-crk-std has configuration) Evidence: .sisyphus/evidence/task-1-ribbon-clients-count.txt Scenario: 无残留 import Tool: Bash Steps: 1. grep "OrgServiceRibbonConfiguration\|CommonServiceRibbonConfiguration" ElevatorApplication.java Expected: no output (zero matches) Evidence: .sisyphus/evidence/task-1-no-orphan-imports.txtCommit: YES | Message:
fix: remove redundant @RibbonClient for ninca-common and ninca-common-component-organization, restore Dubbo discovery| Files:ElevatorApplication.java - Category:
-
2. 废弃 OrgServiceRibbonConfiguration 和 CommonServiceRibbonConfiguration
What to do: 删除这两个 Java 文件,或者在文件上标记
@Deprecated+ 注释说明理由。推荐直接删除(不再被引用)。Must NOT do: 不要删除
NincaCrkStdRibbonConfiguration.java。Files to delete:
maven-cw-elevator-application/cw-elevator-application-starter/src/main/java/cn/cloudwalk/ribbon/OrgServiceRibbonConfiguration.javamaven-cw-elevator-application/cw-elevator-application-starter/src/main/java/cn/cloudwalk/ribbon/CommonServiceRibbonConfiguration.java
Recommended Agent Profile:
- Category:
quick— Reason: 2 file deletions, no logic change - Skills:
[]
Parallelization: Can Parallel: YES | Wave 1 | Blocks: none | Blocked By: none (different files from Task 1)
References:
- Pattern:
src/main/java/cn/cloudwalk/ribbon/OrgServiceRibbonConfiguration.java— file to delete - Pattern:
src/main/java/cn/cloudwalk/ribbon/CommonServiceRibbonConfiguration.java— file to delete
Acceptance Criteria:
ls OrgServiceRibbonConfiguration.javareturns "No such file"ls CommonServiceRibbonConfiguration.javareturns "No such file"ls NincaCrkStdRibbonConfiguration.javaexists (untouched)
QA Scenarios:
Scenario: 两个多余 RibbonConfig 类已删除 Tool: Bash Steps: 1. find cw-elevator-application-starter -name "OrgServiceRibbonConfiguration.java" 2. find cw-elevator-application-starter -name "CommonServiceRibbonConfiguration.java" Expected: both return no output (files don't exist) Evidence: .sisyphus/evidence/task-2-configs-deleted.txt Scenario: NincaCrkStdRibbonConfiguration 未受影响 Tool: Bash Steps: 1. find cw-elevator-application-starter -name "NincaCrkStdRibbonConfiguration.java" Expected: returns file path (file exists) Evidence: .sisyphus/evidence/task-2-ninca-crk-std-intact.txtCommit: YES | Message:
chore: remove unused OrgServiceRibbonConfiguration and CommonServiceRibbonConfiguration| Files:OrgServiceRibbonConfiguration.java,CommonServiceRibbonConfiguration.java -
3. 构建验证 + 格式校验 + 提交
What to do: 全量编译 + formatter 校验。如果通过,统一提交所有变更。
Must NOT do: 不要运行测试(
-DskipTests),不要修改 pom.xml。Recommended Agent Profile:
- Category:
quick— Reason: build + format + commit only - Skills:
[]
Parallelization: Can Parallel: NO | Wave 2 | Blocks: none | Blocked By: 1, 2
References:
- Build command:
cd maven-cw-elevator-application && mvn clean install -DskipTests - Format validation:
cd maven-cw-elevator-application && mvn formatter:validate -Dformatter-maven-plugin.version=2.16.0
Acceptance Criteria:
mvn clean install -DskipTests→ BUILD SUCCESSmvn formatter:validate→ 无违规git status显示 3 个文件变更(1 modified + 2 deleted),无 untracked
QA Scenarios:
Scenario: BUILD SUCCESS Tool: Bash Steps: 1. cd maven-cw-elevator-application && mvn clean install -DskipTests 2>&1 | tail -5 Expected: output contains "BUILD SUCCESS" Evidence: .sisyphus/evidence/task-3-build-output.txt Scenario: formatter 校验通过 Tool: Bash Steps: 1. cd maven-cw-elevator-application && mvn formatter:validate -Dformatter-maven-plugin.version=2.16.0 2>&1 | tail -10 Expected: no FAILED or violation messages Evidence: .sisyphus/evidence/task-3-formatter-output.txtCommit: YES (合并 Task 1+2 的所有变更) | Message:
fix: restore Dubbo discovery for ninca-common and ninca-common-component-organization - Category:
Final Verification Wave (MANDATORY — after ALL implementation tasks)
4 review agents run in PARALLEL. ALL must APPROVE.
- F1. Plan Compliance Audit — oracle
- F2. Code Quality Review — unspecified-high
- F3. Real Manual QA — unspecified-high
- F4. Scope Fidelity Check — deep
Commit Strategy
- Task 1 独立提交:
fix: remove redundant @RibbonClient annotations - Task 2 独立提交:
chore: remove unused Ribbon configuration classes - Task 3 提交:确认编译和格式通过后,git status 干净
Success Criteria
mvn clean install -DskipTestsBUILD SUCCESSmvn formatter:validate无违规ninca-crk-std的@RibbonClient保留,另外两个已删除- 生产部署后不再出现
Load balancer does not have available server for client: ninca-common-component-organization