2014-06-06 36 views
1

我正在使用Apache Commons Pool来存储一组Couchbase客户端。在进行加载测试时(但仍有小负载),经过几千次操作(使用100个连接池)后,某些Couchbase客户端对象开始抛出IlegalStateException,然后关闭它们。Couchbase客户端(Java)IlegalStateException - 检查对象的有效性

我想知道是否有办法来检查CouchbaseClient对象是否仍然有效使用。当从对象调用“set”操作时会生成异常,因此检查客户端是否有效将是一个可接受的解决方案。

我仍然不确定异常的来源是什么。但是,当我在返回池之前对客户端进行某种验证时,问题就会停止。问题是,这种验证(调用set操作来测试客户端是否在工作)太过于强悍,并且会影响性​​能。我想找到一个更平滑的方式来检查这一点。

回答

0

IllegalStateException最常见的原因是无法将操作添加到输入队列。请参阅Couchbase Java开发人员指南中的Bullet-Proof Futures and Listeners部分,了解如何处理它。

但是请注意,100 CouchbaseClient对象是很多!对于每个应用程序,通常不需要多于一个或两个CouchbaseClient对象 - 推荐的用例是异步的,并且有用于处理实际低级操作的内部线程池。

我建议看看Couchbase Java Developer Guide,特别是Understanding and Using Asynchronous Operations的部分。