【问题标题】:Azure Function App with no function and Running background threads没有功能且正在运行后台线程的 Azure Function App
【发布时间】:2026-02-09 10:00:01
【问题描述】:

是否可以运行没有功能但运行将从 Azure 服务总线读取消息的线程的 Azure Function 应用程序?

似乎线程没有从 ASB 读取消息。

更新

我的 Function 应用(没有函数)在本地运行,但在 Azure 上不运行。

【问题讨论】:

  • 没有功能的 Azure Functions 应用? ???请详细说明。
  • 没有函数,实例化一个类的实例,在后台运行。
  • 那么您需要查看 WebJobs,而不是 Functions。函数被触发并且不在后台运行。
  • 我知道函数被触发了。我的 Function 应用(没有函数)在本地运行,但在 Azure 上不运行。
  • 没有功能的功能应用?

标签: azure azure-functions azureservicebus azure-servicebus-queues azure-servicebus-topics


【解决方案1】:

Azure Functions 营销为

不仅仅是事件驱动无服务器计算

事件驱动部分是这里的关键。函数应用程序中的实际函数是由例如计时器、服务总线上的消息或事件网格事件触发的代码。所有其他代码都应该支持完成这项工作。如果您的 Functions 应用程序没有任何功能,则您的代码没有任何入口点可以运行。

两个主要说明:

  1. 有点像你在试图滥用函数
  2. 为什么不使用Service Bus triggers 而不是手动执行相同操作的线程?

看看这个例子,取自Azure Service Bus bindings for Azure Functions - Trigger - C# example

[FunctionName("ServiceBusQueueTriggerCSharp")]                    
public static void Run(
    [ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "ServiceBusConnection")] 
    string myQueueItem,
    Int32 deliveryCount,
    DateTime enqueuedTimeUtc,
    string messageId,
    ILogger log)
{
    log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
    log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.LogInformation($"DeliveryCount={deliveryCount}");
    log.LogInformation($"MessageId={messageId}");
}

此示例显示了一个读取消息元数据并记录服务总线队列消息的 C# 函数。

【讨论】:

  • 我一直在寻找它为什么不起作用。所以只允许一个答案,我希望我也可以将这个很棒的评论作为答案。
【解决方案2】:

Function 应用程序在本地运行但不能在 Azure 中运行的可能原因是消耗计划的运行方式。在 Azure 中的基础结构检测到我们官方支持的触发器之一指示您的函数应用程序需要启动之前,函数应用程序将不会运行。只有在那时才会创建您的应用程序的一个实例。这就是我们实现廉价定价的方式,因为您的代码仅在需要时运行。

正如其他人在 cmets 中所述并补充 rickvdbosch 的出色答案,没有任何实际 Azure Functions 运行的 Azure Functions 应用程序没有多大意义。如果没有在 Azure Function 中运行任何代码,则不会使用 Azure Functions 的任何功能。如果你真的想实现一个始终运行的后台线程,专用的 Azure Web App 将是正确的方法。

话虽如此,使用 rickvdbosch 推荐的服务总线触发器可以处理您可能必须在后台线程中编写的大部分样板文件,并且使您能够使用 Azure Functions Consumption Plan 以及所有定价这些带来的好处。

【讨论】:

  • 这就是我对这个问题的发现。我一直在寻找它为什么不起作用。