Изменения в одном разделе БД Cosmos, переходящие в несколько экземпляров функций Azure - PullRequest
0 голосов
/ 06 мая 2019

У нас есть функция Azure с триггером Cosmos DB, который должен последовательно обрабатывать элементы внутри раздела, но не в каком-либо определенном порядке.Насколько я понимаю, триггер всегда будет посылать все изменения для раздела одному экземпляру функции за раз.Однако я вижу изменения для одного раздела, обрабатываемого несколькими экземплярами функций в течение нескольких секунд.Таким образом, изменение распределения каналов в экземплярах функций не работает так, как я ожидаю.

Это приложение-функция работает на последнем узле функции V2.Функция является долговременной функцией.Мы используем коллекцию 'аренды' с определенным префиксом для управления арендой для этого канала изменений.

[FunctionName("ProcessChanges")]
public static async Task RunAsync([CosmosDBTrigger(
    databaseName: "MyDatabase",
    collectionName: "MyCollection",
    ConnectionStringSetting = "AzureWebJobsCosmosDBConnectionString",
    LeaseCollectionName = "leases",
    LeaseCollectionPrefix = "chgproc",
    CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
    [OrchestrationClient]DurableOrchestrationClient starter,
    ILogger log)
{
    // Processing code that calls the orchestrator function
}

Я ожидаю, что все изменения для данного раздела в данный момент времени перейдут в один экземпляр функции, но иногдаони идут к нескольким экземплярам функций.

1 Ответ

0 голосов
/ 06 мая 2019

Я не могу найти никакой документации о том, как на самом деле должен работать дистрибутив, у вас есть источник этого?

Имеется ли в вашей коллекции аренды раздел /id, как указано в docs ?

Контейнер аренды: Контейнер аренды поддерживает состояние для нескольких динамических экземпляров функции Azure без сервера и обеспечивает динамическое масштабирование.Этот арендный контейнер может быть создан вручную или автоматически с помощью триггера Azure Cosmos DB. Чтобы автоматически создать арендный контейнер, установите в конфигурации флаг CreateLeaseCollectionIfNotExists. Контейнеры секционированной аренды должны иметь определение ключа секции / id.

...