【问题标题】:Asynchronous write to documentdb using java driver使用java驱动程序异步写入documentdb
【发布时间】:2017-06-08 12:09:26
【问题描述】:

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

有没有办法(本机)在后台插入文档而无需让客户端等待。

【问题讨论】:

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


    【解决方案1】:

    我查看了用于 Java 的 Azure DocumentDB SDK 的 javadocs 和源代码,不幸的是,没有任何本机方法来支持异步操作。因此,如果您必须需要异步功能,下面有两种解决方法。

    1. 使用异步http客户端调用Cosmos REST APIs,如OkHttp
    2. 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官方的不一样。

      作为参考,这是我使用第三方驱动程序的示例代码,可以下载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()));
              }
          }
      
      }
      

    希望对你有帮助。

    【讨论】:

    • 非常感谢@peter,也许我会尝试一下 mongoDB 驱动程序,MS 有没有计划增强 SDK 以支持异步,因为这是每个人都想要的东西?
    • @Iswain 您可以向feedback.azure.com/forums/34192--general-feedback 发布反馈,帮助MS 收集客户的建议、想法等。
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2013-10-12
    • 2016-03-13
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多