没有功能且正在运行后台线程的Azure Function应用

时间:2019-06-01 00:44:44

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

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

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

更新

“我的功能”应用(无功能)在本地运行,但在Azure上无法运行。

2 个答案:

答案 0 :(得分:1)

Azure Functions的营销方式为

  

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

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

两个主要说明:

  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#函数,该函数读取消息元数据并记录服务总线队列消息。

答案 1 :(得分:1)

您的Function应用程序可能在本地而不是在Azure中运行的原因可能是由于使用计划的工作原理。在Azure中的基础结构检测到我们官方支持的触发器之一指示您需要启动功能应用程序之前,该功能应用程序将不会运行。仅在那时,才会创建您的应用程序实例。这是我们启用便宜价格的方式,因为您的代码仅在需要时才运行。

正如其他人在评论中所述,并添加到rickvdbosch的出色答案中,没有运行任何实际Azure函数的Azure Functions应用程序没有多大意义。没有在Azure Function中运行任何代码,就不会使用Azure Functions的任何功能。如果您真的想实现始终运行的后台线程,那么专用的Azure Web App将是正确的方法。

话虽如此,使用rickvdbosch建议的Service Bus触发器将处理您可能必须在后台线程中编写的大部分样板,并允许您以所有定价使用Azure Functions消费计划这些带来的好处。