跳转到主要内容
ABP 为生产级交易而构建。按博彩商的熔断器、自动重试与两级紧急系统,可防止单个失败的博彩商级联拖垮整体。本页解释会影响你集成的行为及应对方式。

系统状态

状态与可用性

实时系统状态通过 GET /status(无需鉴权)暴露。可轮询它,或订阅 statusemergency WebSocket 频道以接收推送。
无需鉴权的基础设施端点:
端点用途
GET /health存活性——进程是否运行
GET /ready就绪性——依赖项(DB、缓存、OddsPapi)是否已连接
GET /status系统状态,含紧急模式状态
GET /metricsPrometheus 指标

速率限制

速率限制按客户端(由你的 x-api-key 解析)使用滑动窗口实施。默认值为每秒 100 个请求,可通过 rps 字段按客户端配置。
属性取值
默认限制每秒 100 个请求(按客户端可配置)
窗口1 秒,滑动
范围按客户端(clientName
超限响应429 Too Many Requests
每个被限流的响应都包含标准响应头,便于你调整客户端节奏:
响应头说明
X-RateLimit-Limit你配置的限制(每窗口请求数)
X-RateLimit-Remaining当前窗口剩余请求数
X-RateLimit-Reset距窗口重置的秒数
Retry-After重试前应等待的秒数
429 响应体:
{
  "detail": "Rate limit exceeded",
  "limit": "100",
  "retry_after": 1
}
由于窗口每秒重置,遵循 retry_after 的短暂退避即可。针对速率限制使用指数退避并无额外收益;等待窗口过去即可。
import time
import requests

def call_with_backoff(method, url, **kwargs):
    while True:
        resp = requests.request(method, url, **kwargs)
        if resp.status_code != 429:
            return resp
        time.sleep(float(resp.headers.get("Retry-After", 1)))
要保持在限额内:批量下单POST /place-orders 可在一个请求中接受多个订单)、优先使用 WebSocket 而非轮询,并在工作负载需要更大余量时通过支持申请更高的 rps。WebSocket 连接上限见 WebSocket → 连接限制

熔断器

ABP 运行按博彩商的熔断器。若某博彩商开始失败,其熔断器会打开,指向它的订单将被拒绝(Bookmaker not available),而非挂起。
  • 在对某博彩商连续失败后打开
  • 冷却后自动半开以测试恢复。
  • 一旦博彩商成功响应即关闭并恢复正常路由。
由于熔断器按博彩商隔离,多博彩商订单会在某家不健康时继续路由到健康的博彩商。

带退避的重试

短暂的博彩商故障会以指数退避自动重试,且 ABP 在每次重试前都会拉取最新赔率。重试受订单 expiresAt 约束,因此慢速博彩商绝不会让订单超过其过期时间仍被阻塞。

订单过期

默认 expiresAt = 当前时间 + 5 秒   (最长 24 小时)
若订单无法在窗口内成交,将转为 EXPIRED(若已部分成交则为 PARTIALLY_FILLED)。对时效要求较低的订单设置更长的 expiresAt,对价格纪律更严的订单设置更短的值。

紧急模式(两级)

在极少数情况下——维护或上游事件——ABP 可暂停订单处理。共分两级:
级别影响恢复
软暂停(Soft pause)阻止订单;在途投注继续经设定间隔后自动恢复
紧急(Emergency)阻止新订单并取消待处理订单由操作员手动恢复
状态变更通过 emergency WebSocket 频道广播。紧急模式生效时,POST /place-orders 会返回被拒而非排队。

WebSocket 可靠投递

对于不能丢失的状态(订单成交、结算),在登录时启用 reliableDelivery: true 以获得带确认与重放的至少一次投递。seq 出现间隙即表示漏掉消息;通过 replay 恢复,或经 GET /orders / GET /bets 对账。参见 WebSocket

你的职责

为在客户端保持韧性:
  • 把被拒视为正常流程——处理 declinedOrders 与被拒原因,而非假设每个订单都会成交。
  • 重连后对账——WebSocket 断开后,从最后的 seq 重放,或重新查询 REST 端点。
  • 遵守幂等——重试时复用同一个 requestUuid,使重连风暴无法造成重复下注。参见核心概念
  • 429 时退避——参见上文速率限制

支持与事件

渠道用于
contact@55-tech.com集成帮助、账户/额度变更、更高的 rps
GET /status + emergency 频道实时系统状态
GitHub公开问题与参考
上报事件时,请附上相关的 orderId / requestUuid、博彩商 slug 与 UTC 时间戳——这能大幅加快诊断。

后续步骤

WebSocket

带可靠投递与重放的实时更新。

错误处理

状态码与被拒原因。