使用java驱动程序异步写入documentdb

时间:2017-06-08 12:09:27

标签: azure asynchronous azure-cosmosdb azure-java-sdk

我使用java-sdk将文档插入cosmosdb。从驱动程序我无法找到任何java api进行异步插入,但是我看到了.Net api的选项,

是否有办法(本机地)在后台插入文档而不让客户端等待。

1 个答案:

答案 0 :(得分:1)

我回顾了javadocs&遗憾的是,Azure DocumentDB SDK for Java的源代码没有任何支持异步操作的本机方法。因此,如果您需要异步功能,下面有两种解决方法。

  1. 使用异步http客户端来呼叫Cosmos REST APIs,例如OkHttp
  2. Azure DocumentDB支持MongoDB协议,因此我认为可以使用MongoDB Async Java Driver来满足您的需求,但由于官方的MongoDB异步Java驱动程序似乎不支持Azure,我失败了DocumentDB。但是,有一个第三方MongoDB异步Java驱动程序mongodb-async-driver,我尝试使用MongoDB协议成功连接到Azure DocumentDB,但其API与MongoDB官方不同。

    作为参考,以下是我使用第三方驱动程序下载here的示例代码,没有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()));
            }
        }
    
    }
    
  3. 希望它有所帮助。