feat(gateway): 账号只读查询通道——从已登录账号取真实订单
上游要的不只是网关记的任务状态镜像,还有「已登录账号在站点上的真实订单」,
但账号只在 NAT 后本地机上,只能经网关队列走。新增独立查询通道(§11):
- gateway 单开 account_queries 表 + QueryStatus 状态机,接口
POST /api/account/queries(幂等)/ lease / {id}/result / {id}
- 不复用下单任务队列:查询是只读,租约过期可安全重投(与下单「绝不自动
重投」相反),且不该被全局并发度 1 堵死、task_reports 是订单镜像不能污染
- 本地交易服务起第二条常驻循环 query_runner,领到即调 SiteInteractor 真读:
order_list 复用已实测的 list_recent_orders(规范化字段 + 站点
orderListData 原文),order_detail 复用 fetch_order_detail(配送阶段 +
页面 __INITIAL_STATE__ 原样透传,结构未经真实样本,不抽字段)
- 账号级串行仍由 SiteInteractor 的锁保证;每次执行套超时按失败回报
- 错误码 6005/6006(查询通道,可重试只读区别于 6001-6004);/health 暴露
queued_query_count;结果体积上限先丢原始 JSON
openapi.json 重导,docs/order-gateway.md §11、README、.env.example 补全
配置与实测边界。全量测试 404→454 通过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+20
-1
@@ -105,7 +105,8 @@ RAKUTEN_RELOGIN_TIMEOUT_SECONDS=300
|
||||
|
||||
# ---- 以下仅下单任务网关使用 ----
|
||||
# 任务队列 SQLite 文件路径(相对项目根目录)。务必放在持久化卷上,丢了等于
|
||||
# 丢了一批下单任务。详见 docs/order-gateway.md。
|
||||
# 丢了一批下单任务。查询通道(account_queries 表)在同一份库文件里。
|
||||
# 详见 docs/order-gateway.md。
|
||||
RAKUTEN_GATEWAY_DB_PATH=data/gateway.db
|
||||
# 任务租约 TTL(秒)。worker 领取后必须在此时间内首次 report 或 renew,否则
|
||||
# 任务被置为 stale(**绝不自动重投**,需要人工 reclaim)。
|
||||
@@ -115,6 +116,24 @@ RAKUTEN_LEASE_MAX_WAIT_SECONDS=60
|
||||
# worker 心跳超时阈值(秒)。超过即视为失联,/health 报 degraded。
|
||||
RAKUTEN_WORKER_OFFLINE_ALERT_SECONDS=300
|
||||
|
||||
# ---- 账号只读查询通道(网关与本地 worker 共享),详见 docs/order-gateway.md §11 ----
|
||||
# 查询单租约 TTL(秒)。worker 领走后需在此期间回结果,否则自动重投回丢列。
|
||||
# 与下单任务的关键区别:**只读操作可以安全重投**。
|
||||
RAKUTEN_QUERY_LEASE_TTL_SECONDS=180
|
||||
# 查询单整体存活上限(秒)。从创建算起,超过仍未完成即置 expired(多半本地 worker 不在线)。
|
||||
RAKUTEN_QUERY_TTL_SECONDS=900
|
||||
# 同一张查询单最多被领取几次。重投累计到此仍无结果即置 failed。
|
||||
RAKUTEN_QUERY_MAX_ATTEMPTS=3
|
||||
# 终态查询单保留时长(秒)。结果里带站点原始 JSON,超期由 sweep 清理。
|
||||
RAKUTEN_QUERY_RETENTION_SECONDS=604800
|
||||
# worker 侧单次站点读取上限(秒)。查询在等账号锁(下单正跑)时也会超时失败,
|
||||
# 上游重发即可——只读,重发没有副作用。
|
||||
RAKUTEN_ACCOUNT_QUERY_TIMEOUT_SECONDS=120
|
||||
# order_list 查询缺省翻页上限。上游可用 params.max_pages 覆盖(1..20)。
|
||||
RAKUTEN_ACCOUNT_QUERY_DEFAULT_MAX_PAGES=3
|
||||
# 回报结果 JSON 体积上限(字节)。超限先丢站点原始 JSON,仍超限判失败让上游缩小窗口。
|
||||
RAKUTEN_QUERY_RESULT_MAX_BYTES=1048576
|
||||
|
||||
# ---- 以下仅交易服务内的下单 worker 使用 ----
|
||||
# 网关 URL。**留空则不启动 worker**,交易服务只跑登录态接口。
|
||||
# 部署形态:本地机(NAT 后无公网入口)通过出站长轮询从这里领任务。
|
||||
|
||||
Reference in New Issue
Block a user