Alpaca券商SSE事件流
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/alpaca-broker-sse-events。
技能介绍
解决什么问题
轮询 REST 接口拿券商生命周期事件,要么丢事件要么放大延迟。事件流覆盖账户状态、Journal、资金划转、成交回报、非交易活动五条线,路径和版本还不统一,凭经验硬写很容易踩坑:拿不到历史、重连后静默丢数、重复事件触发重复副作用。
这个技能要给出一套可落地的消费方案,从连接建立、断线重连、历史回放到幂等处理,每一步都有明确做法。
核心能力
- 多流统一订阅:账户状态走
/v1/events/accounts/status,成交更新走/v2/events/trades,Journal 走/v2/events/journals/status,资金走/v2/events/funding/status,非交易活动走/v1/events/nta。路径不是单一版本,逐条验证后再写代码。 - 断点回放:每个事件带
event_id(或 ULID),消费成功后持久化游标。重连时带上since_id(v2)或since_ulid(v1),服务端会把断开期间的事件补给你。没有游标的重连等于白断。 - 静默检测与退避重连:
lastMessageAt超过阈值就主动拆连接;重连用指数退避并封顶;加单次重连标志位,防止错误风暴打出一堆并发连接。 - 事件级容错:每个事件的处理逻辑包在
try/catch里,单条消息坏了只记录日志,不能让整条流停掉。 - 幂等消费管道:以
event_id为键做 upsert 去重,处理目标行时加锁,状态机只在当前状态允许时才推进,处理成功再推进游标。
适用边界与注意点
- SSE 不是行情通道:这是券商生命周期事件,和行情 WebSocket 是两套传输、两套认证、两套可靠性模型,不能混用。
- 游标参数不能混用:
since、since_id、since_ulid三者只能选一个方向。只给until不给since是非法请求。 - 同毫秒事件不保证严格排序:ULID 带随机分量,对账场景建议从几分钟前的游标重启,靠幂等吸收重叠。
- 生成式客户端会挂死:OpenAPI 无法建模流式响应,codegen 出来的客户端会一直等一个永远不会结束的 response。要用真正的流式 HTTP/SSE 客户端,且确认它允许你在初始请求上加
Authorization头。 - SSE 只是低延迟管道,不是正确性保证:长时间宕机、bug、未处理的类型都会漏。始终配一个周期性对账任务,从 Alpaca 拉权威状态做 upsert。SSE 管快,对账管对。
使用场景
- 券商后台需要把账户状态变化实时推送到内部系统,驱动开户审核和交易权限开通流程
- 交易系统需要在成交回报到达时实时更新本地订单状态,并在成交时刷新持仓缓存
- 资金系统需要按 entity_type 分流处理转账、银行关系和 FundingWallet 的统一事件流
- 服务端需要用 SSE 客户端建立长连接,解析 data: 帧并处理 ULID 和整数 event_id 的游标差异
适合人员
- 负责券商集成的后端工程师,需要在生产环境稳定消费 Alpaca Broker 生命周期事件
- 构建交易系统的可靠性工程师,需要处理断线重连、心跳检测和幂等去重
- 对接券商数据平台的开发者,需要把 SSE 事件流与本地对账任务结合