Метод Azure Cosmos BulkExecuter не найден - PullRequest
0 голосов
/ 16 января 2019

Я использую Microsoft.Azure.DocumentDb v2.1.3 и Microsoft.Azure.CosmosDb.BulkExecuter v1.4.0, и когда я запускаю код:

public async Task CreateMultipleAsync(IEnumerable<JObject> models)
{
    var collectionLink = UriFactory.CreateDocumentCollectionUri(_databaseName, _collectionName);
    var collection = await _client.ReadDocumentCollectionAsync(collectionLink);
    var bulkExecutor = new BulkExecutor(_client, collection);

    try
    {
        await bulkExecutor.InitializeAsync();
        var response = await bulkExecutor.BulkImportAsync(models, true);
    } catch (Exception ex)
    {

    }
}

Я получаю эту ошибку:

Метод не найден. ).

Я видел несколько человек с этой проблемой (похоже, продолжает появляться), и они предлагают использовать v2.1.3 и v1.4.0 соответственно, что я уже делаю.

Я использую .net 4.6.2 . Кто-нибудь знает, почему это происходит

1 Ответ

0 голосов
/ 01 февраля 2019

@ r3plica,

Это старая проблема, которая была исправлена ​​в версии 1.1.2 или более поздней версии BulkExecutor.

Я попытался воспроизвести вашу проблему, используя Github Repo , чтобы запустить метод BulkImportAsync BulkExecutor, сработал для меня отлично.

Я использовал метод ниже для CreatePartitionCollection-

static internal async Task<DocumentCollection> CreatePartitionedCollectionAsync(DocumentClient client, string databaseName,
            string collectionName, int collectionThroughput)
        {
            PartitionKeyDefinition partitionKey = new PartitionKeyDefinition
            {
                Paths = new Collection<string> { ConfigurationManager.AppSettings["CollectionPartitionKey"] }
            };
            DocumentCollection collection = new DocumentCollection { Id = collectionName, PartitionKey = partitionKey };

            try
            {
                collection = await client.CreateDocumentCollectionAsync(
                    UriFactory.CreateDatabaseUri(databaseName),
                    collection,
                    new RequestOptions { OfferThroughput = collectionThroughput });
            }
            catch (Exception e)
            {
                throw e;
            }

            return collection;
        }

А затем в методе Main используется BulkImport, как показано ниже: -

// Подготовка к массовому импорту.

// Создание документов с простым ключом раздела. строка partitionKeyProperty = dataCollection.PartitionKey.Paths [0] .Replace ("/", "");

    long numberOfDocumentsToGenerate = long.Parse(ConfigurationManager.AppSettings["NumberOfDocumentsToImport"]);
    int numberOfBatches = int.Parse(ConfigurationManager.AppSettings["NumberOfBatches"]);
    long numberOfDocumentsPerBatch = (long)Math.Floor(((double)numberOfDocumentsToGenerate) / numberOfBatches);

    // Set retry options high for initialization (default values).
    client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 30;
    client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 9;

    IBulkExecutor bulkExecutor = new BulkExecutor(client, dataCollection);
    await bulkExecutor.InitializeAsync();

    // Set retries to 0 to pass control to bulk executor.
    client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 0;
    client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 0;

    BulkImportResponse bulkImportResponse = null;
    long totalNumberOfDocumentsInserted = 0;
    double totalRequestUnitsConsumed = 0;
    double totalTimeTakenSec = 0;

    var tokenSource = new CancellationTokenSource();
    var token = tokenSource.Token;

var tasks = new List ();

        tasks.Add(Task.Run(async () =>
        {
            Trace.TraceInformation(String.Format("Executing bulk import for batch {0}", i));
            do
            {
                try
                {
                    bulkImportResponse = await bulkExecutor.BulkImportAsync(
                        documents: documentsToImportInBatch,
                        enableUpsert: true,
                        disableAutomaticIdGeneration: true,
                        maxConcurrencyPerPartitionKeyRange: null,
                        maxInMemorySortingBatchSize: null,
                        cancellationToken: token);
                }
                catch (DocumentClientException de)
                {
                    Trace.TraceError("Document client exception: {0}", de);
                    break;
                }
                catch (Exception e)
                {
                    Trace.TraceError("Exception: {0}", e);
                    break;
                }
            } while (bulkImportResponse.NumberOfDocumentsImported < documentsToImportInBatch.Count);



            totalNumberOfDocumentsInserted += bulkImportResponse.NumberOfDocumentsImported;
            totalRequestUnitsConsumed += bulkImportResponse.TotalRequestUnitsConsumed;
            totalTimeTakenSec += bulkImportResponse.TotalTimeTaken.TotalSeconds;
        },
        token));

Дайте мне знать, если вам нужно больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...