按 docs/order-gateway.md 落地:第三个部署单元 app.gateway(:31109)承担任务队列 + 状态镜像;本地 worker 在 app.trading.worker 内,按 RAKUTEN_ORDER_GATEWAY_URL 决定是否启动。规格 §5 最关键约束已守:租约过期绝不自动重投,恢复只能 reclaim, worker 收到 lease_count>1 时先核对站点订单。 站点交互(加购/下单/付款/订单列表反查)按规格 §10 留接口缝,site_interact.py 全部 NotImplementedError,verify.py 恒返回 unknown——等真实账号实测后再填, 不写猜测的提交逻辑。 310 个测试全绿,覆盖规格 §9 验收清单 12 条;架构测试守住三方互不 import。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
30 lines
902 B
Python
30 lines
902 B
Python
"""网关容器:集中管理网关侧服务实例,用于依赖注入"""
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import logging
|
|
from dataclasses import dataclass
|
|
|
|
from app.gateway.db import GatewayDB
|
|
from app.gateway.task_queue import TaskQueue
|
|
from app.shared.config import Settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class GatewayContainer:
|
|
"""网关容器
|
|
|
|
与抓取/交易容器同样的依赖注入风格,但持有的是任务队列与 SQLite 连接,
|
|
生命周期由 main.lifespan 管理:start 时打开 DB,close 时关闭。
|
|
|
|
`sweep_task` 是常驻后台扫描,把过期的 leased/running 推到 stale。
|
|
即使没有 lease 请求,过期的任务也会被及时发现(规格 §5 的关键约束)。
|
|
"""
|
|
|
|
settings: Settings
|
|
db: GatewayDB
|
|
task_queue: TaskQueue
|
|
sweep_task: asyncio.Task | None = None
|