Azure 存储队列触发的 Azure 函数

Posted

技术标签:

【中文标题】Azure 存储队列触发的 Azure 函数【英文标题】:Azure Function triggered by Azure Storage Queue 【发布时间】:2021-10-30 10:16:15 【问题描述】:

我正在尝试设置由 Azure 存储队列中的新消息触发的 Azure 函数。我有如下代码设置将消息发送到队列:

QueueClient queue = new(connectionString, queueName);
await queue.SendMessageAsync(message);

这部分工作正常。当我传入 connectionString、queueName 和 message 时,我可以看到该消息位于门户上的 Queue 中。

这是我无法理解的部分。我使用 Azure 存储队列模板设置了一个 Azure 函数,它引用的队列与 queueName 相同。但是,将消息添加到队列时,Azure 函数不会记录任何内容。据我了解,Azure 函数应该由添加到它指向它的队列中的消息触发,并且它应该记录该消息。我尝试了 .NET Core 3.1 In Process 和 .NET 5 隔离进程。我不确定我在这里缺少什么,或者我是否误解了某些东西。这是 Azure 函数 (.NET 5) 的代码。

[Function("QueueTrigger1")]
public static void Run([QueueTrigger("myqueue-items", Connection = "something_STORAGE")] string myQueueItem, FunctionContext context)

    var logger = context.GetLogger("QueueTrigger1");
    logger.LogInformation($"C# Queue trigger function processed: myQueueItem");

这是程序.cs

public static void Main()

    var host = new HostBuilder()
        .ConfigureFunctionsWorkerDefaults()
        .Build();

    host.Run();

这是host.json


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

【问题讨论】:

贴出azure函数代码+startup/program.cs(用于NET 5隔离)和host.json @ThiagoCustodio 我添加了 .NET 5 函数的代码。这是我按照 Microsoft Docs 上的教程得到的。 对我来说一切正常,只要确保 local.settings.json 有一个有效的 something_STORAGE 条目:docs.microsoft.com/en-us/azure/azure-functions/… @Stefan 您在 azure 门户中看到您的函数应用程序的任何“通知”吗?通常在那里报告缺少/不正确的连接字符串。您是否有一个名为 something_STORAGE 的配置 AppSettings 具有连接字符串值? @Shyju 这是问题所在,我没有意识到 Azure 中没有使用 local.settings.json。我将 Connection 值更改为 Azure 门户中的值,它可以正常工作。 【参考方案1】:

FileLoggingMode 用于在azure 门户本地环境 中生成日志“fileLoggingMode”中的不同模式是

“debugOnly”: 当函数应用在 Azure 门户 上运行时,此级别将生成日志。这是默认模式。

“always”:此模式用于在本地环境以及在上运行时生成日志Azure 门户。这个code 参考有助于更好地理解它。

“从不”:此模式生成任何日志。

您需要将host.json替换为以下代码来配置我们函​​数的日志信息。

 
   "version":"2.0",
   "logging":
      "fileLoggingMode":"debugOnly",
      "logLevel":
         "Function.MyFunction":"Error",
         "default":"Information",
          "Host": "Error", 
          "Host.Aggregator": "Information"
      ,
      "applicationInsights":
         "samplingSettings":
            "isEnabled":true,
            "excludedTypes":"Request"
         
      
   

函数应用程序的configure log level 参考链接 有关 azure 函数日志记录的更多信息,您可以参考下面的SO thread

【讨论】:

以上是关于Azure 存储队列触发的 Azure 函数的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions:如何在 Azure 存储队列的绑定表达式中使用 POCO?

我们可以使用 Azure 存储队列作为事件源吗?

使用多个 Azure 队列触发单个 Azure 函数

Azure 函数队列触发器:如何设置出列消息的时间延迟

Azure 函数 - 挂起队列触发器

更新到 Microsoft.Net.Functions 3.0.3 后如何正确设置 Azure 队列触发器?