How to perform many robust features launched by Azure Queue?

In short, our task is to process a large number of input messages. To solve this problem, we decided to use Azure Queue Storage and Azure Functions. We have an Azure function structure similar to the following code:

Queue start function:

[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);
}

Long Term Function:

[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
    // ...
}

An example of a simple activity function:

[FunctionName("Function_1")]
public static ResultMessage Run(
    [ActivityTrigger] DurableActivityContext activityContext,
    TraceWriter log)
{
    var msg = activityContext.GetInput<InputMessage>();
    int time = new Random().Next(1, 3);
    Thread.Sleep(time * 1000);

    return new ResultMessage()
    {
        Payload = $"Function_1 slept for {time} sec"
    };
}

MessageControllerExecutor is launched when a new item is received in the queue. MessageController is a long-lived function that uses several simple activity functions to process each message.

, MessageControllerExecutor , MessageController , , . , MessageController . , 100 , MessageController 10-20% . . , , .

, :

  • ?
  • - ?
  • ?
+4
2
  • , !
  • , , .
  • , , , : ? . - , , , . , - , , , . , Azure .

- , , await Task.WhenAll(...)? - , , (, Function_3), .

: , async void. , . async Task , ? , async void .NET.

+1

. Thread.Sleep(), , CreateTimer Api.

0

Source: https://habr.com/ru/post/1693102/


All Articles