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

被动Mongo:已超过500的最大操作数(maxQueueWaitSize)

汲昊空
2023-03-14

我正在使用ReactiveMongoTemplate MongoDB ChangeStream来监听对MongoDB集合的更新,执行一些查询,并将文档持久化到另一个集合。虽然它在本地运行良好,但在部署到容量很大的UAT后,它开始出现以下错误:

Too many operations are already waiting for a collection. Max number of operations (maxWaitQueueSize) of 500 has been exceeded.

解决这个问题的方法是什么?

我的档案里有application.yml

spring:
   data: 
      mongodb:
          uri: mongodb://host:port/db?authMechanism=<val1>&authSource=<val2>&authechanismProperties=<val3>

这就是简化更改拖缆的外观:

@Autowired
ReactiveMongoTemplate reactiveMongoTemplate;

reactiveMongoTemplate
  .changeStream(Sample.class)
  .watchCollection("sample_collection")
  .filter(
     new Criteria.orOperator(
        where("operationType").is("update"),
        where("operationType").is("insert")
     )
  )
  .listen()
  .flatMap(r->processMessage(r)). // processMessage does some queries to collections including this collection being listened to and upserts to same mongodb in a different collection
  .subscribeOn(Schedulers.boundedElastic())
  .subscribe();

我知道我可能需要添加一些连池才能处理多个连接?但是我如何使用Reactive MongoDB配置它?我是反应式编程的新手。任何指针都会很有帮助。

共有1个答案

孔琪
2023-03-14

这里有几件事你可以做:

>

  • 检查是否有一些长阻塞调用正在进行,导致线程被阻塞,并导致创建许多连接,因为之前的连接仍然被占用执行繁重的任务。尝试检查对阻塞这些调用的代码的一些优化。在反应式编程中,您可以使用BlockHound检查阻塞代码的存在。

    通过指定waitQueueMultiplemaxPoolSize来增加连接限制https://docs.mongodb.com/manual/reference/connection-string/#connection-池选项

    在此之前,您可以使用查看mongo db统计数据来查看当前和允许的连接

    db.serverStatus().connections
    

  •  类似资料:
    • 我是相当新的Spring和MongoDB,并有一个问题,从我的MongoDB拉数据。我试图获得相当大的数据量,并收到以下异常: 执行器错误:操作失败:排序操作使用超过最大33554432字节的RAM。添加索引,或指定一个较小的限制。;嵌套异常是com.mongodb.MongoExc0019: Execator错误:操作失败:排序操作使用超过内存的最大33554432字节。添加索引,或指定较小的限

    • 问题内容: 我收到了ORA-01000 SQL异常。因此,我对此有一些疑问。 最大打开游标是否与JDBC连接的数量完全相关,还是与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池) 有没有一种方法可以配置数据库中的语句/结果集对象的数量(如连接)? 是否建议在单线程环境中使用实例变量statement / resultset对象而不是方法local statement / resul

    • 问题内容: 所以我用这个例子: https://github.com/mcmoe/mssqldocker 为了创建一个SQL Server映像并将其加载数据。我有几个运行容器时运行的sql脚本。 但是,在构建映像时,我开始出现此错误: 我不确定如何解决此问题,我重新启动了docker甚至更新了它。我读了约125层的书吗?谁能解释这个的原因和可能的解决方法? 我发现此命令可以运行: 我的docker

    • 方法是 现在我试着像这样改成stream,但我不知道这种改是否正确: 如何避免出现例外,解决问题? 我应该以某种方式重构代码吗?

    • 我试图用位于S3上的输入文件创建一个Amazon Transbe作业,该文件的大小是4.3GB,当我试图创建作业时,会显示这个错误。 我可以用我的视频做什么?我应该转换视频,提取音频,还是有什么方法可以用一些AWS服务来做

    • 本文向大家介绍数据结构中的最大WBLT操作,包括了数据结构中的最大WBLT操作的使用技巧和注意事项,需要的朋友参考一下 在这里,我们将看到什么是不同的Max-WBLT操作。HBLT具有不同的操作,例如插入,删除和初始化。它们也与WBLT非常相似。但是,融合操作可以在一次从上到下的过程中完成。 WBLT可以进行单遍熔合操作。因为我们可以在下降的过程中找到w值。我们可以根据需要更新w值并交换子树。对于