[英]Get Queue name or Topic+Subscriber name in azure function (Azure Service Bus triggered functions)
[英]"Wake up" time of Azure Function triggered by Service Bus Queue
我有一个由 Azure 服务总线队列触发的 Azure 函数 - Azure 函数应用托管在消费计划中。
当队列中出现新消息时,唤醒 Azure Function 最多需要多长时间? (假设过去 20 分钟内没有消息)。
是否在任何地方指定? 我在文档中发现:
对于非 HTTP 触发器,新实例最多每 30 秒分配一次。
这是否意味着我无法在 30 秒内更快地处理队列中的第一条消息?
将计时器触发的 Azure 函数添加到同一个函数应用程序(以及触发的服务总线)是否有助于保持 Azure 函数实例正常运行?
首先,当使用消费计划并空闲约20分钟时,功能应用进入空闲状态。 然后如果你使用该功能,你会遇到冷启动,这需要一些时间才能唤醒。
对于您的问题:
这是否意味着我无法在 30 秒内更快地处理队列中的第一条消息?
这取决于以下内容(链接在这里):
1 .您使用的是哪种语言(例如,使用 c# 的函数比 java 更快),以下内容摘自上面的链接:
典型的冷启动延迟跨度为 2 到 15 秒。 C# 函数通常在 3 秒内完成启动,而 JavaScript 和 Java 的尾部更长。
2.你的函数中依赖的数量:
添加依赖项并因此增加部署的包大小将进一步增加冷启动持续时间。
将计时器触发的 Azure 函数添加到同一个函数应用程序(以及触发的服务总线)是否有助于保持 Azure 函数实例正常运行?
是的,将计时器触发的 azure 函数添加到同一个函数应用程序将使其他应用程序保持热身(启动和运行)。
处理ServiceBusTrigger函数“冷启动”的另一个选项是使用Azure 事件网格的事件功能,如果服务总线实体中没有消息并且有新消息到达,则立即发出事件。 在此处查看更多详细信息。
请注意,当第一条消息到达服务总线实体时,会立即发出该事件。 在这种情况下,当消息存在时,下一个事件将根据侦听器/接收器的空闲时间发出。 此空闲(看门狗)时间是从上次在服务总线实体上使用侦听器/接收器的时间起定期 120 秒。
这是一个推送模型,服务总线实体上没有侦听器,因此 AEG 订阅者(EventGridTrigger 函数)将“平衡”接收消息与 ServiceBusTrigger 函数(其侦听器/接收器)。
使用REST API删除/接收来自服务总线实体(队列)的消息,订阅者可以非常容易和直接地获得它。
因此,在主题providers/Microsoft.ServiceBus/namespaces/myNamespace上使用 AEG 事件并在eventType = "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners"上进行过滤,可以使用 ServiceBudTrigger 函数并排接收消息并解决 AF 问题关于“冷启动”。
请注意,只有 Azure 服务总线高级层集成到 AEG。
以下代码片段显示了使用EventGridTrigger函数的服务总线 AEG 订阅者的示例:
#r "Newtonsoft.Json"
using System;
using System.Threading.Tasks;
using System.Text;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static async Task Run(JObject eventGridEvent, ILogger log)
{
log.LogInformation(eventGridEvent.ToString());
string requestUri = $"{eventGridEvent["data"]?["requestUri"]?.Value<string>()}";
if(!string.IsNullOrEmpty(requestUri))
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", Environment.GetEnvironmentVariable("AzureServiceBus_token"));
var response = await client.DeleteAsync(requestUri);
// status & headers
log.LogInformation(response.ToString());
// message body
log.LogInformation(await response.Content.ReadAsStringAsync());
}
}
await Task.CompletedTask;
}
Azure Functions 可以在消耗计划或专用应用服务计划上运行。 如果您在专用模式下运行,您需要为您的功能应用程序打开Always On
设置才能正常运行。 函数运行时会在几分钟不活动后进入空闲状态,因此只有 HTTP 触发器才能真正“ wake up
”您的函数。 这类似于WebJobs
必须启用 Always On 的方式。
有关详细信息,请参阅 Azure Functions 文档中的 Always On。
函数应用的超时持续时间由 host.json 项目文件中的 functionTimeout 属性定义。 下表显示了两个计划和两个运行时版本的默认值和最大值(以分钟为单位):
您可以在此处阅读有关冷启动的更多信息。
https://azure.microsoft.com/en-in/blog/understanding-serverless-cold-start/
HTTP 触发器在您的情况下肯定会帮助您预热您的实例,但满足 24/7 类型要求的理想方法是使用专用的应用程序服务计划。 希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.