首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CosmosDB同步客户端: Iterator<FeedResponse<Document>>它被困在hasNext()方法上了

CosmosDB同步客户端: Iterator<FeedResponse<Document>>它被困在hasNext()方法上了
EN

Stack Overflow用户
提问于 2019-09-17 06:05:34
回答 1查看 182关注 0票数 0

在我试图运行跨分区查询的代码中,it.hasNext()行被卡住了。无法在此进一步调试:

代码语言:javascript
复制
    public List<MyDataObject> getList() {
    List<Document> documentList =null;
    List<MyDataObject> returnList = new ArrayList<>();
    try {
        FeedOptions feedOptions = new FeedOptions();
        feedOptions.setEnableCrossPartitionQuery(true);
        SqlQuerySpec querySpec = null;
        querySpec = new SqlQuerySpec("SELECT * FROM MyDataObjectColl");
        Iterator<FeedResponse<Document>> getDataFromCosmos = myDocumentClient.queryDocuments(collectionLink, querySpec, feedOptions).toBlocking().getIterator();
        while (getDataFromCosmos.hasNext()) { //GETTING STUCK ON THIS LINE FOR SOME REASON
            FeedResponse<Document> page = getDataFromCosmos.next();
            System.out.println("Request Unit Cost for getList " + page.getRequestCharge());
            documentList = page.getResults();
            for (Document doc : documentList) {
                if (doc != null) {
                    returnList.add(gson.fromJson(doc.toJson(), MyDataObject.class));
                }
            }
        }
    }   catch (Exception e) {
        throw new RuntimeException(e);
    }
    return returnList;
}

SDK版本:

代码语言:javascript
复制
    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-cosmosdb</artifactId>
        <version>2.4.4</version>
    </dependency>

嘿,CosmosDB内部专家,请指出是什么导致了这种行为,我怀疑有些库正在被封锁,请帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 18:05:35

由于怀疑是版本问题导致了这种情况,基本上,我的应用程序内部库使用的是commons-lang3的以下版本:

代码语言:javascript
复制
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.1</version>
    </dependency>

但是azure-cosmosdb 2.4.4需要不同的:

代码语言:javascript
复制
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.8.1</version>
    </dependency>

详细说明:基本上在FetchExecutionRangeAccumulator类的内部使用一行this.stopwatch.getTime(TimeUnit.MILLISECONDS),但是long getTime(final TimeUnit timeUnit)存在于3.8.1版本的Common-Lang3中,而不是3.3.1中,因此它在内部陷入轮询代码,如果重试相同的代码流,则会间歇性地抛出异常(在Common-lang3中找不到的方法)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57968220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档