Skip to content

缓存与重试

SDK 内置缓存和重试机制,从容应对限流、网络抖动和重复请求。

缓存

启用缓存后,相同的查询会命中本地缓存,直接返回,减少对 Maven Central 的请求。这对高频调用同一坐标的场景(如轮询、CI 反复检查)尤其有用。

go
client := api.NewClient()

// 启用缓存
client.EnableCache()

// 自定义 TTL(默认见下方说明)
client.SetCacheTTL(10 * time.Minute)

// 查询缓存状态
client.IsCacheEnabled()   // true
client.GetCacheTTL()      // 10m0s

// 清空缓存
client.ClearCache()

// 关闭缓存
client.DisableCache()

重试

底层 HTTP 客户端内置指数退避重试,自动应对:

  • HTTP 429(Too Many Requests / 限流)
  • HTTP 5xx(服务端错误)
  • 瞬时网络错误(连接超时、EOF)

重试会按指数增长间隔(如 1s → 2s → 4s ...)逐步退避,避免加重服务端压力。重试次数有上限,超过后返回最后一次错误。

搜索 API 的限流

search.maven.org 对高频请求会返回 429。SDK 的重试机制让你无需手动处理——正常调用即可,被限流时自动等待重试。

自定义 HTTP 客户端

如需更精细的控制(代理、自定义超时、TLS 配置),可替换底层 *http.Client

go
customHTTP := &http.Client{
    Timeout: 30 * time.Second,
    Transport: &http.Transport{
        Proxy: http.ProxyFromEnvironment,
        // ...其他 transport 配置
    },
}

client := api.NewClient(api.WithHTTPClient(customHTTP))

Publisher 客户端同理:

go
publisher := api.NewPublisherClient(
    api.WithPublisherToken(token),
    api.WithPublisherHTTPClient(customHTTP),
)

这也是注入测试桩httptest.Server 返回的客户端)的入口,便于单元测试。

基于 MIT 许可证发布