事件网格“ Microsoft.EventHub.CaptureFileCreated”事件未发布到Azure函数订阅

时间:2018-07-04 12:37:11

标签: azure azure-functions azure-eventgrid azure-eventhub-capture

我正在尝试开发一种Azure功能,以对由事件中心的捕获功能创建的Blob进行操作。但是,尽管捕获Blob已正确存储在容器中,但似乎没有Microsoft.EventHub.CaptureFileCreated事件被发布到Function订阅。已成功创建对函数终结点的事件订阅,并且没有错误,并且Azure CLI的输出为

{
  "additionalProperties": {},
  "deadLetterDestination": null,
  "destination": {
    "additionalProperties": {},
    "endpointBaseUrl": "https://xxxxx-xxxxx-xxxxx.azurewebsites.net/api/EventGridWebhook",
    "endpointType": "WebHook",
    "endpointUrl": null
  },
  "eventDeliverySchema": "InputEventSchema",
  "filter": {
    "additionalProperties": {},
    "includedEventTypes": [
      "Microsoft.EventHub.CaptureFileCreated"
    ],
    "isSubjectCaseSensitive": null,
    "subjectBeginsWith": "",
    "subjectEndsWith": ""
  },
  "id": "/subscriptions/yyyyy-yyyyy-yyyyyy/resourceGroups/test-event-grid-grp/providers/Microsoft.EventHub/namespaces/capture-hub-namespace/providers/Microsoft.EventGrid/eventSubscriptions/captureFunctionV1Sub",
  "labels": null,
  "name": "captureFunctionV1Sub",
  "provisioningState": "Succeeded",
  "resourceGroup": "test-event-grid-grp",
  "retryPolicy": {
    "additionalProperties": {},
    "eventTimeToLiveInMinutes": 1440,
    "maxDeliveryAttempts": 30
  },
  "topic": "/subscriptions/yyyyy-yyyyy-yyyyyy/resourceGroups/test-event-grid-grp/providers/microsoft.eventhub/namespaces/capture-hub-namespace",
  "type": "Microsoft.EventGrid/eventSubscriptions"
}

该函数的主体是一个标准的Http触发器,具有事件网格端点订阅所需的其他验证部分

public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    string jsonContent = await req.Content.ReadAsStringAsync();
    log.Info($"Webhook was triggered! Input: {jsonContent}");
    dynamic events = JsonConvert.DeserializeObject(jsonContent);

    if (req.Headers.GetValues("Aeg-Event-Type").FirstOrDefault() == "SubscriptionValidation")
    {
        var code = events[0].Data["validationCode"];
        return req.CreateResponse(HttpStatusCode.OK,
            new { validationResponse = code });
    }

    return req.CreateResponse(HttpStatusCode.OK);
}

作为一个实验,如果我为另一种类型的事件(例如blob创建事件)添加相同函数的端点,则可以在日志中看到该函数的调用。此外,在事件订阅的Metrics刀片中,似乎从未有事件发布给订阅者

Empty subscription publish metrics

此外,与webhook触发器一样,将捕获事件的订阅添加到Logic App或存储队列,导致发布了零个事件。还值得注意的是,这对于Azure函数(v1和v2)都不能同时使用两个运行时环境,甚至在使用特定的EventGridTrigger属性而不是通用Http触发器时也不能使用;但是,其他事件类型可以正确发布事件并触发功能。

为参考可能的复制步骤,我从this Microsoft tutorial中汲取了灵感,略过了SQL Server /数据仓库部分。 在寻找其他有类似问题的人时,我发现this question似乎与我的情况有关,但是没有明确的答案或线索可能是什么问题。必须缺少一些东西,但是我不知道下一步该怎么做。

1 个答案:

答案 0 :(得分:0)

几天后,这似乎是基础架构的临时问题。今天早上,我进行了其他测试,一切正常。

此外,我发现过去几天成功触发了我的函数的日志,而无需进行任何更改。