Azure Триггер хранилища BLOB-объектов не активирует спящую функцию - PullRequest
1 голос
/ 02 мая 2020

Этот вопрос похож на Azure Триггер хранилища BLOB-объектов Функция не срабатывает

Однако их проблема заключалась в том, что их Azure функция не сразу проснулась, создавая впечатление не обрабатывал триггеры из Azure хранилища BLOB-объектов, хотя фактически это происходило через 10 минут, что в точности соответствует заявлению MS Docs.

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=csharp

My Проблема в другом. Мой блоб уже 9 часов сидит в контейнере, и он до сих пор не обработан.

Все, что он делает - это отправляет сообщение на ServiceBus.

[FunctionName("IncomingFileDetected")]
[return: ServiceBus("incoming-file-received", EntityType = Microsoft.Azure.WebJobs.ServiceBus.EntityType.Topic)]
public static IncomingFile Run(
    [BlobTrigger("incoming-files/{filename}", Connection = "ConnectionStrings:MutableStorage")]
    Stream contents,
    string filename,
    ILogger log)
{
    log.LogInformation($"Detected new blob file: {filename}");
    return new IncomingFile(filename);
}

В служебной шине не было сообщений.

Теперь, через 9 часов, я перезапустил приложение функции и большой двоичный объект были обработаны в течение приблизительно 10 минут.

1 Ответ

1 голос
/ 04 мая 2020

Обновление:

Спасибо, что поделились с Питером Моррисом, проблема в том, что план обслуживания d1. Итак, сначала убедитесь, что вы основаны на трех видах планов: план потребления, премиум-план и план обслуживания приложений. Когда мы используем azure функцию, даже только тестирование, мы должны использовать план потребления. Самым маленьким в производстве является S1, который обычно используется для тестирования.

Оригинальный ответ:

Приведенный ниже код отлично работает на моей стороне. Даже с планом потребления проблем нет.

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace FunctionApp35
{
    public static class Function1
    {
        [FunctionName("Function1")]
        [return: ServiceBus("test", Connection = "ServiceBusConnection")]
        public static string Run([BlobTrigger("samples-workitems/{name}", Connection = "str")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
            string a = "111111111111111";
            return a;
        }
    }
}

Это мои локальные настройки:

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=lti/ThmF+mw9BebOacp9gVazIh76Q39ecikHSCkaTcGK5hmInspX+EkjzpNmvCPWsnvapWziHQHL+kKt2V+lZw==;EndpointSuffix=core.windows.net",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "str": "DefaultEndpointsProtocol=xxxxxx",
    "ServiceBusConnection": "Endpoint=sb://bowmantestxxxxxx"
  }
}

Ул отсюда:

enter image description here

ServiceBusConnection находится здесь:

enter image description here

enter image description here

И обратите внимание, что большой двоичный объект не будет удален из контейнера после запуска функции azure. Кроме того, не забудьте создать хотя бы одну подписку в служебной шине topi c.

enter image description here

Все вышеперечисленное также прекрасно работает после функции быть развернутым до azure. (Отличие от локального заключается в том, что вам нужно добавить настройки в настройках конфигурации вместо local.settings. json)

enter image description here

enter image description here

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