Асинхронная запись в documentdb с использованием драйвера Java

Я использую Java-SDK для вставки документов в космос. Из драйвера я не смог найти Java API для асинхронной вставки, однако я видел варианты для .Net API,

Есть ли способ (изначально) вставлять документы в фоновом режиме, не заставляя клиента ждать.

1 ответ

Я рассмотрел javadocs и исходный код SDK Azure DocumentDB для Java, к сожалению, нет никакого собственного метода для поддержки асинхронной операции. Поэтому, если вам нужна асинхронная функция, есть два обходных пути ниже.

  1. Использование асинхронного http-клиента для вызова API Cosmos REST, например OkHttp.
  2. Azure DocumentDB поддерживает протокол MongoDB, поэтому я думаю, что можно использовать асинхронный драйвер Java MongoDB для удовлетворения ваших потребностей, но я потерпел неудачу из-за того, что официальный асинхронный драйвер Java MongoDB, похоже, не поддерживает Azure DocumentDB. Тем не менее, существует сторонний MongoDB асинхронный драйвер Java mongodb-async-driver, который я попытался успешно подключить к Azure DocumentDB с протоколом MongoDB, но его API-интерфейсы отличаются от официального MongoDB.

    Для справки: Вот мой пример кода с использованием стороннего драйвера, который можно скачать здесь, без репозитория 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()));
            }
        }
    
    }
    

Надеюсь, поможет.

Другие вопросы по тегам