2017-06-08 61 views

回答

1

我回顧了javadocs & Azure DocumentDB SDK for Java的源代碼,但不幸的是,沒有任何本地方法來支持異步操作。所以如果你需要異步功能,下面有兩種解決方法。

  1. 使用異步http客戶端調用Cosmos REST APIs,如OkHttp
  2. 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())); 
         } 
        } 
    
    } 
    

希望它能幫助。

+0

感謝@peter,可能我會嘗試一下mongoDB驅動,有沒有計劃讓MS增強SDK以支持異步,因爲它是每個人都想要的東西? – lambodar

+0

@Iswain您可以通過https://feedback.azure.com/forums/34192--general-feedback發佈反饋,幫助MS收集客戶的建議,想法等。 –

相關問題