我的容器中有两个函数:一个带有 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 触发器不会。我能做什么呢?
当我向存储中添加 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。
输出:
访问 HTTP 函数 URL 后,收到以下输出: