当前位置: 首页 > 知识库问答 >
问题:

用于Azure Cosmos的Mongo驱动程序-读取和速率限制

丁阳炎
2023-03-14

以下配置出现问题,

public DatabaseQueryResult find(String collectionName, Map<String, Object> queryData) {

    Document toFind = new Document(queryData);
    MongoCollection<Document> collection = this.mongoDatabase.getCollection(collectionName);

    FindIterable<Document> findResults = collection.find(toFind);

    if (findResults != null) {
        Document dataFound = findResults.first();
        return new DatabaseQueryResult(dataFound.toJson(this.settings))     
    }

    // other stuff...
}
{
   "$err":"Message: {\"Errors\":[\"Request rate is large. More Request Units may be needed, so no changes were made. Please retry this request later. Learn more: http://aka.ms/cosmosdb-error-429\"]}\r\n s",
   "code":16500,
   "_t":"OKMongoResponse",
   "errmsg":"Message: {\"Errors\":[\"Request rate is large. More Request Units may be needed, so no changes were made. Please retry this request later. Learn more: http://aka.ms/cosmosdb-error-429\"]}\r\n",
   "ok":0
}

我预计这里会抛出一个异常--但后面的驱动程序似乎不是这样。正在发生的是,

  • collection.find返回一个FindIterable,其JSON错误结果如上,作为第一个文档
  • 我们最终返回一个带有JSON错误的DatabaseQueryResult作为查询负载

我不希望这种情况发生--如果查询操作返回的OKMongoResponse中“OK”为0,我更希望mongo驱动程序抛出MongoCommandException/MongoQueryException。这在写中似乎很好,它将使用一个CommandProtocol对象,响应正如我所期望的那样得到了验证--只是读似乎发生了变化。

共有1个答案

袁耀
2023-03-14

我不知道蒙哥为什么换了这个司机。宇宙方面有一些东西可能会有所帮助。您可以提出支持票,并要求他们打开服务器端重试。这将改变Cosmos的行为,这样请求会排队,而不是在太多时抛出429个。

这更多地反映了Mongo在VM或Atlas(也在VM上运行)中运行时的行为,而不是像Cosmos DB这样的多租户服务。

 类似资料:
  • 以下查询在mongo shell中完美运行。 我想用java编程实现同样的功能。我尝试了以下方法,但没有得到任何结果。

  • 我已经准备了一些在Mongo上执行的脚本。它在命令行中按预期工作: 但是当我试图在java(scala)代码中移动它时,它不能与 有人成功使用db.eval()方法吗?

  • 使用mongo c#驱动程序的连池和等待队列出现问题。 有没有办法从MongoClient获取指标?活动连接的数量、连接池的大小、等待队列的大小等。

  • 有人能详细说明酒吧/子系统实施的动态费率限制吗?我在gcloud文档或faq页面上找不到任何细节。 下面是我的pubsub用法:我计划在我们的生产中使用pubsub。现在,我有1个主题、1个订阅和1个订阅者(Webhook HTTPS回调)。有时我的订阅者可能会抛出异常(非常少),在这种情况下,我的订阅者将返回一个400响应给pubsub,以便pubsub可以保留消息并重试。 如果pubsub从用

  • 我的java代码使用com.mongodb.DB的单个实例连接到mongo DB。现在我使用这个db实例跨越500个线程,这些线程对我的db执行命令。所有这些都并行运行。以下是conf参数: 现在,如果我使用“db.serverStatus().connections”检查我的数据库,我会得到以下结果:“current”:52,“available”:19999,“totalCreated”:Nu

  • 我正在尝试对我们的一些内部服务(网格内部)应用速率限制。 我使用了文档中的示例并生成了redis速率限制配置,其中包括(redis)处理程序、配额实例、配额规范、配额规范绑定和应用处理程序的规则。 此redis处理程序: 配额实例(目前我只对按目的地限制感兴趣): 配额规格,如果我理解正确,每个请求收费1: 所有参与服务预取的配额绑定规范。我还尝试了,但也没有任何效果。 应用处理程序的规则。目前在