java - CosmosDB 异步客户端:迭代器> 它卡在 hasNext() 方法上
问题描述
我尝试运行跨分区查询的以下代码卡在 it.hasNext() 行上。无法在此处进一步调试:
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;
}
开发工具包版本:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-cosmosdb</artifactId>
<version>2.4.4</version>
</dependency>
嘿,CosmosDB 内部专家请指出可能导致此行为的原因,我怀疑某些库丢失而导致阻塞,请帮忙。
解决方案
怀疑是版本问题导致了这种情况,基本上我的应用程序内部库正在使用以下版本的commons-lang3:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.1</version>
</dependency>
但是azure-cosmosdb 2.4.4需要不同的:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
详细说明:
基本上 cosmosdb 在FetchExecutionRangeAccumulator类内部使用一行this.stopwatch.getTime(TimeUnit.MILLISECONDS)
,但long getTime(final TimeUnit timeUnit)
存在于 3.8.1 版本的 commons-lang3 而不是 3.3.1 中,因为它在内部陷入轮询代码并间歇性抛出异常(在commons-lang3) 如果重试相同的代码流。
推荐阅读
- php - 在 PHP8 中处理“未定义的数组键”警告
- flutter - 请调试将字符串转换为 uri 编译器错误
- python - 如何使用循环读取许多不同名称的文件?我如何写入 json 文件?
- python - 网页抓取:我得到的输出列和格式不正确。如何获得所需的格式和列?
- java - 从 Spring Boot 向后迁移到 Spring Core
- c++ - Sizeof 在函数中返回的结果不同
- swift - 在后台线程中对 Realm Results 对象进行排序
- express - 如何在 Expressjs 中实现 3 Diff Passport 本地策略
- javascript - 如何根据坐标在 HTML 中的图像上添加脉冲点动画
- c# - 是否可以在 c# 中为多个控件生成处理 previewKeyDown 的单个函数?