非阻塞异步mongo java / scala驱动程序可以阻止线程 - 如何处理它?

时间:2015-12-01 17:01:49

标签: java mongodb scala asynchronous

使用非阻塞异步mongo java / scala驱动程序,可以为无法使用空闲连接直接执行的操作定义等待时间和等待队列大小。 设置这些值时,mongo驱动程序将使线程等待可用连接。

对于使用非阻塞异步IO编写的应用程序,此行为非常危险。 这些应用程序使用非常有限数量的线程(=核心数)。 阻止其中一个线程可以阻止整个应用程序。

这种应用的推荐方法是什么? 我们应该将所有这些等待设置设置为0并在应用程序中重试处理MongoWaitQueueFullException吗? 当连接空闲时,驱动程序是否应该调用应用程序回调?

提前感谢您的回答!

1 个答案:

答案 0 :(得分:1)

异步驱动程序似乎没有阻止任何线程。 我误解了文档解释:“线程可能等待连接变为可用的最长时间。” (http://api.mongodb.org/java/3.0/com/mongodb/connection/ConnectionPoolSettings.html#getMaxWaitTime-java.util.concurrent.TimeUnit-

杰夫编写了一个程序,显示没有线程被阻止:https://gist.github.com/jyemin/139b7bc2a94d49f5903f。该设置仅为回调设置超时。