¿Cómo puedo controlar la concurrencia o escalamiento en mi función?

Diego Fuentes 0 Puntos de reputación
2024-03-11T20:47:52.4333333+00:00

Estoy utilizando una función que recibe mensajes por ServiceBus con la siguiente configuración:

<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.1" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.8.1" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.3" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />

En host.json tengo lo siguiente para poder limitar la concurrencia (creo que hay opciones que no importan pero :

  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": "api",
      "maxOutstandingRequests": 200,
      "maxConcurrentRequests": 1,
      "dynamicThrottlesEnabled": true
    },
    "queues": {
      "batchSize": 1
    },
    "serviceBus": {
      "clientRetryOptions": {
        "mode": "exponential",
        "tryTimeout": "00:05:00",
        "delay": "00:00:00.80",
        "maxDelay": "00:01:00",
        "maxRetries": 3
      },
      "autoCompleteMessages": false,
      "maxConcurrentCalls": 1,
      "maxConcurrentSessions": 1,
      "maxMessageBatchSize": 1
    }
  },
  "concurrency": {
    "dynamicConcurrencyEnabled": false,
    "maximumFunctionConcurrency": 1,
    "cpuThreshold": 0.8,
    "snapshotPersistenceEnabled": true
  },

Estoy buscando una opción para quitar la concurrencia en el procesamiento de la función. Quiero que procese una operación a la vez. Revisando la documentación, encontré las opciones anteriores y el agregué en la configuración de la función (aplication setting) functionAppScaleLimit=1.

Estos cambios no funcionan y sigo teniendo procesamientos de los mensajes en paralelo. Como se puede ver en la imagen, dado los operation_Id en la tabla trace del ApplicationInsights de la función, ordenados por timestamp, hay dos mensajes que se están procesando en paralelo.
User's image

¿Qué y cómo debo configurar la función para no tener procesamientos en paralelo? Puedo aceptar procesar más de un mensaje por vez, pero en un mismo operation_Id, para que se procese consecutivamente y no simultáneamente.

Azure
Azure
Plataforma e infraestructura de informática en la nube para crear, implementar y administrar aplicaciones y servicios a través de una red mundial de centros de datos administrados por Microsoft.
151 preguntas
ASP.NET
ASP.NET
Conjunto de tecnologías de .NET Framework para la creación de aplicaciones y servicios web XML.
28 preguntas
0 comentarios No hay comentarios
{count} votos