我正在使用cloudant的免费订阅,所以我每秒只能进行5次查询。

我也有6个带有6个存储库的模型,在存储库初始化时,我将其称为createIndex:

@PostConstruct
    private void initRepo() {
        db = dbManager.getDatabase();
        List<Index> indexes = db.listIndices();
        String indexName = String.format("index_%s", getModelClass().getSimpleName());
        if (indexes != null && !indexes.stream().filter(c -> c.getName().equals(indexName)).findFirst().isPresent()) {
            Log.debug("Creating index for " + indexName);
            db.createIndex(indexName, indexName, null,
                    getIndexFields() != null ? getIndexFields().toArray(new IndexField[0]) : null);
        }
    }


使用mvn testmvn install调用了全部6个initRepo,所以我得到429。

我可以告诉spring等待5秒再初始化一些仓库吗?
还是有最佳做法?

最佳答案

以下是一些选项:

1)将您的Cloudant操作排队,并且仅以小于速率限制的速率(例如每秒4个)消耗队列中的项目

2)将Cloudant服务升级到更慷慨的计划

3)java-cloudant库具有使用429ReplayInterceptor的选项。这将重试API调用,该调用将获得具有指数补偿的429响应。

10-07 12:36