Blob 触发器未唤醒 docker 容器

问题描述 投票:0回答:1

我的容器中有两个函数:一个带有 blob 触发器,另一个带有 HTTP 触发器。运行时版本是4.28.4.4:

托管环境是“仅消费”。

当我向存储中添加 blob 时,几个小时过去了,该功能却没有被触发。

然后我调用 HTTP 函数(一个仅返回“hello”的简单函数),所有待处理的 blob 都会得到处理。

当 blob 最终触发时,它执行时没有错误:

以下是我的 HTTP 触发代码:

[FunctionName("SayHello")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    var message = "Hello!";
    return new OkObjectResult(message);
}

斑点触发器:

[FunctionName("ProcessJpegImage")]
public static async Task RunAsync(
    [BlobTrigger(Containers.JpgExportProcessing + "/{name}", Connection = "[REDACTED]")] Stream inputBlob,
    string name,
    IDictionary<string, string> metadata,
    ILogger log)
{
    // ... processing code
}

我在另一个类中有容器名称:

public static class Containers
{
    public const string JpgExportProcessing = "jpg-export-processing";
    // ... more containers
}

我的

host.json
是默认的:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            },
            "enableLiveMetricsFilters": true
        }
    }
}

我正在使用该函数的进程内模型。这是 csproj 文件的一部分:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Azure.Data.Tables" Version="12.8.2" />
    <PackageReference Include="Azure.Storage.Blobs" Version="12.19.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.0.1" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.2.0" />
  </ItemGroup>
  <!-- ... files to copy to output/publish -->
</Project>

我猜测 HTTP 触发器会唤醒容器,但 blob 触发器不会。我能做什么呢?

azure-functions azure-blob-storage azure-container-instances azure-blob-trigger
1个回答
0
投票

当我向存储中添加 blob 时,几个小时过去了,该功能却没有被触发。 然后我调用 HTTP 函数(一个仅返回“hello”的简单函数),所有待处理的 blob 都会得到处理。

我使用运行时堆栈 dotnet 创建了 http 触发器和 blob 触发器函数。

通过使用下面的代码和配置,我可以访问存储帐户容器中的 blob,而无需访问 http 函数。

Blob触发函数代码:

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

namespace AzureFunctionsDemo
{
    public class ProcessJpegImage
    {
        [FunctionName("ProcessJpegImage")]
        public void Run([BlobTrigger("pavan/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
        }
    }
}

Http触发功能代码:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.IO;
using System.Threading.Tasks;

public static class SayHello
{
    [FunctionName("SayHello")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        var message = "Hello!";
        return new OkObjectResult(message);
    }
}

主机.json:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            },
            "enableLiveMetricsFilters": true
        }
    }
}

local.settings.json:

{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "your-storage account conn-string",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}

当我运行上述函数时,它成功处理了容器中的所有 blob。

输出:

enter image description here

访问 HTTP 函数 URL 后,收到以下输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.