我有一个多线程应用程序,可以对AWS CloudSearch(搜索端点)和文档上传调用(到doc端点)进行搜索调用。我需要为每个使用不同的ClientConfiguration
,我发现该类不是线程安全的,但我认为AmazonCloudSearchDomainClient
是线程安全的。 (右?)
此外,关于AmazonCloudSearchDomainClient
,javadoc说,“使用此客户端进行的所有服务调用都是阻塞的,并且在服务调用完成之前不会返回。”所以在我的多线程Web应用程序中,这样做我应该为每个搜索请求创建一个新的域客户端,这样一个用户的搜索不会阻止另一个?这会不会使每次搜索都变慢,因为创建域客户端需要一些时间?
我想真正的问题是:我可以为哪些对象创建静态以及需要为每个请求创建什么?
ClientConfiguration searchConfig = new ClientConfiguration();
ClientConfiguration docConfig = new ClientConfiguration().withGzip(true).withRequestTimeout(90000);
AmazonCloudSearchDomainClient searchClient = new AmazonCloudSearchDomainClient(credentials, searchConfig).withEndpoint(searchEndpoint);
AmazonCloudSearchDomainClient docClient = new AmazonCloudSearchDomainClient(credentials, searchConfig).withEndpoint(searchEndpoint);
更新:在我的测试中,我为每个搜索和文档请求获取了新的ClientConfiguration
和AmazonCloudSearchDomainClient
个对象。获取第一个(无论是搜索还是doc请求)需要500-1000ms,然后所有后续请求都需要< = 10ms。所以也许我应该在安全的一面,只为每个请求创建一个新对象......