gpt4 book ai didi

azure - 使用逻辑应用在无服务器 Azure Functions 上按顺序消息处理

转载 作者:行者123 更新时间:2023-12-02 07:07:20 27 4
gpt4 key购买 nike

我需要在 Azure 上处理传入消息。每条消息都将与一个特定的实体相关联(例如,通过 EntityId 属性),并且属于同一实体的消息必须按彼此的顺序进行处理。同时,我会保留 Azure Functions 的无服务器特性;如果我有 1,000 个实体的稳定消息流,我希望我的函数有 1,000 个并发执行。我还没有找到实现这一目标的干净方法。服务总线队列具有 session ,这是最接近我的要求的实现,但 Azure Functions 不支持它们:https://github.com/Azure/azure-functions-host/issues/563 。但是,它们似乎在 Azure 逻辑应用程序中受支持。我正在考虑创建一个由使用 session 的服务总线队列触发的 Azure 逻辑应用程序(“使用服务总线 session 进行相关的按顺序传递”模板),然后 Hook 到 HTTP 触发的 Azure 函数来处理消息。逻辑应用的唯一目的是防止同时处理属于同一实体/ session 的多个消息。有人可以提供一些关于这种方法是否有效以及是否有任何警告的见解吗?

最佳答案

看看一位 Azure Function 团队成员写的这篇文章: In order event processing with Azure Functions

它使用 Azure FunctionsAzure Events Hubs :

Azure Events Hubs can handle billions of events, and has guarantees around consistency and ordering per partition.

对于您的场景,与同一 EntityId 相关的每条消息都必须转到同一分区。

按顺序处理并让 azure 函数独立扩展的技巧是从事件中心提取批处理并保留顺序。

你的函数应该是这样的:

[FunctionName("EventHubTrigger")]
public static async Task RunAsync([EventHubTrigger("ordered", Connection = "EventHub")] EventData[] eventDataSet, TraceWriter log)
{
log.Info($"Triggered batch of size {eventDataSet.Length}");
foreach (var eventData in eventDataSet)
{
try
{
// Process message in order here.
}
catch
{
// handle event exception
}
}
}

我建议您阅读整篇文章,它非常有启发性

您可以在 Github 上找到完整的解决方案:

https://github.com/jeffhollan/functions-csharp-eventhub-ordered-processing

关于azure - 使用逻辑应用在无服务器 Azure Functions 上按顺序消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com