2017-06-08 2 views

Répondre

1

J'ai passé en revue le code source javadocs & de Azure DocumentDB SDK pour Java, malheureusement, il n'existe aucune méthode native pour prendre en charge l'opération asynchrone. Donc, si vous avez besoin d'une fonctionnalité asynchrone, il existe deux façons de contourner le problème ci-dessous.

  1. En utilisant un client asynchrone http appeler Cosmos REST APIs, comme OkHttp.
  2. Azure DocumentDB prend en charge le protocole MongoDB, donc je pense qu'il est possible d'utiliser MongoDB Async Java Driver pour satisfaire vos besoins, mais j'ai échoué en raison du pilote officiel MongoDB Async Java ne semble pas supporter Azure DocumentDB. Toutefois, il existe un pilote Java MongoDB asynchrone tiers mongodb-async-driver, que j'ai essayé de connecter à Azure DocumentDB avec le protocole MongoDB avec succès, mais ses API sont différentes de l'officiel MongoDB.

    Comme référence, Voici mon exemple de code en utilisant le pilote tiers qui doit être téléchargé here, sans repavo 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())); 
         } 
        } 
    
    } 
    

Hope it helps.

+0

merci beaucoup @peter, peut-être que je vais essayer le pilote mongoDB, y a-t-il un plan pour MS pour améliorer le SDK pour soutenir async parce que c'est quelque chose que tout le monde veut? – lambodar

+0

@Iswain Vous pouvez poster un commentaire sur https://feedback.azure.com/forums/34192--general-feedback, qui aide MS à collecter les suggestions, les idées des clients, etc. –