CosmosDBTrigger的Azure函数似乎不是由upserts触发的

时间:2018-08-31 12:35:01

标签: c# asp.net azure azure-functions azure-cosmosdb

我是第一次使用Azure Functions。我正在尝试编写一个简单的函数来响应更改或添加到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的原因。

我已将其从Visual Studio发布到Azure,可以看到该函数是使用以下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 :(得分:0)

我不确定这是造成您问题的根本原因,但是您对leaseCollection的理解是错误的。

leaseCollection用于协调Function App的多个实例(工作人员)以在工作人员之间分配分区。

即使是单个函数,也需要侦听Cosmos DB更改供稿。