Асинхронная запись в documentdb с использованием драйвера Java
Я использую Java-SDK для вставки документов в космос. Из драйвера я не смог найти Java API для асинхронной вставки, однако я видел варианты для .Net API,
Есть ли способ (изначально) вставлять документы в фоновом режиме, не заставляя клиента ждать.
1 ответ
Я рассмотрел javadocs и исходный код SDK Azure DocumentDB для Java, к сожалению, нет никакого собственного метода для поддержки асинхронной операции. Поэтому, если вам нужна асинхронная функция, есть два обходных пути ниже.
- Использование асинхронного http-клиента для вызова API Cosmos REST, например OkHttp.
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())); } } }
Надеюсь, поможет.