Skip to content

[Bug] task/shop 中 CheckItem 与 CheckItemGray 的命名语义与实际行为相反 #1090

@xxs588

Description

@xxs588

✅ 验证清单

  • 🔍 我已经搜索过现有 Issues,确信这不是重复问题
  • 📚 我已阅读 dubbo-go-samples/task/shop 相关代码并结合实际运行结果验证
  • 🧪 我已经在本地运行样例并确认问题主要是语义命名错位,而不是基础实现失效

🚀 Go 版本

go1.25.6 linux/amd64

📦 Dubbo-go 版本

本地验证时使用:

Dubbo-go v3.3.2-20260419

🖥️ 服务端配置

使用 dubbo-go-samples/task/shopfrontend/server_v1/server.go

💻 客户端配置

通过 frontend 暴露的 HTTP 入口验证:

  • /login
  • /grayLogin

🌐 协议配置

Triple

📋 注册中心配置

Zookeeper 127.0.0.1:2181

💾 操作系统

Linux

📝 Bug 描述

在验证 task/shop 灰度/流量治理相关场景时,发现 frontend/server_v1/server.goCheckItemCheckItemGray 的函数命名语义与实际行为相反。

当前实现中:

  • CheckItem 会在 context 中附加:

    • dubbo.tag=gray
    • dubbo.force.tag=true
  • CheckItemGray 反而直接使用 context.Background(),不附加 gray tag

也就是说,从实际行为看:

  • CheckItem 才是在执行 gray/tag route 语义
  • CheckItemGray 才是在执行默认路由语义

本地测试过程中,没有发现这里的基础调用实现本身有功能错误;问题更像是命名语义与实际行为反了。
这会导致使用者在阅读代码、对照 HTTP 入口、验证灰度路由时产生明显困惑。

🔄 重现步骤

  1. 打开 task/shop/frontend/server_v1/server.go
  2. 查看 CheckItem 的实现。
  3. 查看 CheckItemGray 的实现。
  4. 对照两个 HTTP 入口的调用链路:
    • /login
    • /grayLogin
  5. 结合实际请求结果观察:
    • CheckItem 实际附加 gray tag
    • CheckItemGray 实际不附加 gray tag

✅ 预期行为

函数命名应与实际语义一致:

  • CheckItem:默认调用,不附加 gray tag
  • CheckItemGray:gray 调用,附加 dubbo.tag=graydubbo.force.tag=true

这样代码命名、HTTP 入口命名和灰度治理语义才能一致,测试时也更直观。

❌ 实际行为

当前实现相反:

  • CheckItem:附加 gray tag,实际执行 gray 路由语义
  • CheckItemGray:不附加 gray tag,实际执行默认路由语义

这会导致:

  1. 阅读代码时对函数职责产生误判
  2. 对照 /login/grayLogin 的测试结果时容易混淆
  3. 在排查 tag route / gray provider 问题时增加理解成本
  4. 样例作为流量治理演示时,语义表达不够直观

💡 可能的解决方案

建议将两个函数的实现调整为与命名一致:

  1. CheckItem

    • 使用默认 context.Background()
    • 不附加 dubbo.tag
  2. CheckItemGray

    • context 中附加:
      • dubbo.tag=gray
      • dubbo.force.tag=true

如果当前实现是出于历史原因保留下来的,也建议至少补充注释或 README 说明,明确这两个函数当前的真实行为,避免样例使用者在测试时误解。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions