我正在使用 java-sdk 将文档插入 cosmosdb。从驱动程序中我找不到任何 java api 来进行异步插入,但是我看到了.Net api的选项,
有没有办法(本机)在后台插入文档而无需让客户端等待。
我正在使用 java-sdk 将文档插入 cosmosdb。从驱动程序中我找不到任何 java api 来进行异步插入,但是我看到了.Net api的选项,
有没有办法(本机)在后台插入文档而无需让客户端等待。
我查看了用于 Java 的 Azure DocumentDB SDK 的 javadocs 和源代码,不幸的是,没有任何本机方法来支持异步操作。因此,如果您必须需要异步功能,下面有两种解决方法。
Azure DocumentDB 支持 MongoDB 协议,所以我认为可以使用MongoDB Async Java Driver来满足您的需求,但是由于官方的 MongoDB Async Java Driver 似乎不支持 Azure DocumentDB,我失败了。但是,有一个第三方 MongoDB Asynchronous Java Driver mongodb-async-driver
,我尝试使用 MongoDB 协议成功连接到 Azure DocumentDB,但它的 API 与 MongoDB 官方不同。
作为参考,这是我使用第三方驱动程序的示例代码,可以在此处下载,没有 maven repo。
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()));
}
}
}
希望能帮助到你。