Функция Azure с CosmosDBTrigger, по-видимому, не вызывается upserts - PullRequest
0 голосов
/ 31 августа 2018

Я работаю с функциями Azure впервые. Я пытаюсь написать простую функцию, которая отвечает на документы, измененные или добавленные в коллекцию CosmosDb. Функция, которую я написал, выглядит следующим образом:

[FunctionName("ChangeLog")]
public static void Run([CosmosDBTrigger(
    databaseName: "Recaptcha",
    collectionName: "Rules",
    ConnectionStringSetting = "CosmosDBConnection",
    LeaseCollectionName = null)]IReadOnlyList<RuleConfigCollection> documents)
{
    if (documents != null && documents.Count > 0)
    {
        ApplicationEventLogger.Write(
            Diagnostics.ApplicationEvents.RecaptchaRulesChanged,
            new Dictionary<string, object>()
            {
                { "SomeEnrichment", documents[0].Rules.ToList().Count.ToString() }
            });
    }
}

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

Я опубликовал это в Azure из Visual Studio и вижу, что функция создана со следующим function.json:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.12",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "cosmosDBTrigger",
      "connectionStringSetting": "CosmosDBConnection",
      "collectionName": "Rules",
      "databaseName": "Recaptcha",
      "leaseDatabaseName": "Recaptcha",
      "createLeaseCollectionIfNotExists": false,
      "name": "documents"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/My.Namespace.Functions.App.dll",
  "entryPoint": "My.Namespace.Functions.App.ChangeLogFunction.Run"
}

Я также добавил параметр приложения с именем CosmosDBConnection со значением AccountEndpoint=https://my-cosmosdb.documents.azure.com:443;AccountKey=myAccountKey;.

Я запускаю функцию, затем добавляю документ в коллекцию, но в журналах просто продолжают появляться сообщения No new trace in the past n min(s), а ожидаемые события приложения не записываются.

Я что-то пропустил в этой настройке?

1 Ответ

0 голосов
/ 31 августа 2018

Я не уверен, что это коренная причина вашей проблемы, но ваше понимание leaseCollection неверно.

leaseCollection используется для координации нескольких экземпляров (рабочих) вашего приложения-функции для распределения разделов между рабочими.

Требуется даже при прослушивании одной функции для изменения канала Cosmos DB.

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