小编Tar*_*huk的帖子

如何执行Azure Queue触发的大量持久功能?

如果简单,我们的任务是处理大量输入消息.为了解决这个问题,我们决定使用Azure队列存储和Azure功能.我们有Azure Functions结构,类似于以下代码:

队列触发功能:

[FunctionName("MessageControllerExecutor")]
public static async void Run(
    [QueueTrigger(QUEUE_NAME, Connection = QUEUE_CONNECTION_NAME)]string queueMessage,
    [OrchestrationClient] DurableOrchestrationClient client,
    TraceWriter log)
{
    await client.StartNewAsync("MessageController", queueMessage);
}
Run Code Online (Sandbox Code Playgroud)

耐用功能:

[FunctionName("MessageController")]
public static async void Run(
    [OrchestrationTrigger] DurableOrchestrationContext context,
    TraceWriter log)
{
    if (!context.IsReplaying) log.Warning("MessageController started");

    var function1ResultTask = context.CallActivityAsync<ResultMessage>("Function_1", new InputMessage());
    var function2ResultTask = context.CallActivityAsync<ResultMessage>("Function_2", new InputMessage());

    await Task.WhenAll(function1ResultTask, function2ResultTask);

    // process Function_1 and Function_2 results
    // ...
}
Run Code Online (Sandbox Code Playgroud)

简单活动功能样本:

[FunctionName("Function_1")]
public static ResultMessage Run(
    [ActivityTrigger] DurableActivityContext activityContext,
    TraceWriter log)
{
    var msg = …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-functions

9
推荐指数
1
解决办法
2496
查看次数

如何处理Azure存储队列中的大消息?

我们使用几个 azure 函数和 azure 存储队列在它们之间进行通信。我们知道每个队列消息的限制为 64kB,因此我们必须使用消息压缩,但有时我们会超出该限制。根据文档https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted#capacity-and-quotas

\n\n
\n

Azure 通过组合队列和 blob \xe2\x80\x93 来支持大消息,此时您可以为单个项目排队最多 200 GB。

\n
\n\n

看起来我们可以将大消息放入存储队列中。不幸的是没有关于此的额外文档。所以我们的问题是它应该如何运作?它应该开箱即用,或者我们应该使用某种模式,例如将消息写入 blob,将带有 blob id 的消息放入队列,然后在某些队列触发的函数中按 id 读取 blob?

\n\n

我们使用 Microsoft.Azure.Storage.Queue v9.4.2 nuget 包将消息推送到队列中。

\n

c# azure-storage azure-storage-queues

5
推荐指数
1
解决办法
4321
查看次数