使用java驱动程序异步写入到documentdb
问题描述:
我正在使用java-sdk将文档插入到cosmosdb。从驱动程序中,我找不到任何java api来执行异步插入,但是我看到了.Net api,使用java驱动程序异步写入到documentdb
,的选项有没有办法(原生地)在后台插入文档而没有让客户端等待。
答
我回顾了javadocs & Azure DocumentDB SDK for Java的源代码,但不幸的是,没有任何本地方法来支持异步操作。所以如果你需要异步功能,下面有两种解决方法。
- 使用异步http客户端调用Cosmos REST APIs,如OkHttp。
-
Azure DocumentDB支持MongoDB协议,所以我认为可以使用MongoDB Async Java Driver来满足您的需求,但由于官方的MongoDB Async Java Driver似乎不支持Azure DocumentDB,所以我失败了。但是,有第三方MongoDB异步Java驱动程序
mongodb-async-driver
,我尝试成功地使用MongoDB协议连接到Azure DocumentDB,但其API与MongoDB官方不同。作为参考,这里是我的示例代码使用第三方驱动程序下载here,没有maven回购。
import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import com.allanbank.mongodb.MongoClient; import com.allanbank.mongodb.MongoCollection; import com.allanbank.mongodb.MongoDatabase; import com.allanbank.mongodb.MongoFactory; import com.allanbank.mongodb.MongoIterator; import com.allanbank.mongodb.bson.Document; import com.allanbank.mongodb.builder.Find; public class Test { public static void main(String[] args) throws InterruptedException, ExecutionException { String connectionString = "mongodb://<user>:<password>@<documentdb-name>.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"; MongoClient mongo = MongoFactory.createClient(connectionString); String dbName = "testdb"; MongoDatabase database = mongo.getDatabase(dbName); String collName = "test"; MongoCollection collection = database.getCollection(collName); Future<Long> future = collection.countAsync(); System.out.printf("There are %,d documents in the collection.%n", future.get()); MongoIterator iter = collection.find(Find.builder().build()); while (iter.hasNext()) { System.out.println(((Document) iter.next())); } } }
希望它能帮助。
感谢@peter,可能我会尝试一下mongoDB驱动,有没有计划让MS增强SDK以支持异步,因为它是每个人都想要的东西? – lambodar
@Iswain您可以通过https://feedback.azure.com/forums/34192--general-feedback发布反馈,帮助MS收集客户的建议,想法等。 –