0
我正在使用java-sdk將文檔插入到cosmosdb。從驅動程序中,我找不到任何java api來執行異步插入,但是我看到了.Net api,使用java驅動程序異步寫入到documentdb
,的選項有沒有辦法(原生地)在後臺插入文檔而沒有讓客戶端等待。
我正在使用java-sdk將文檔插入到cosmosdb。從驅動程序中,我找不到任何java api來執行異步插入,但是我看到了.Net api,使用java驅動程序異步寫入到documentdb
,的選項有沒有辦法(原生地)在後臺插入文檔而沒有讓客戶端等待。
我回顧了javadocs & Azure DocumentDB SDK for Java的源代碼,但不幸的是,沒有任何本地方法來支持異步操作。所以如果你需要異步功能,下面有兩種解決方法。
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收集客戶的建議,想法等。 –