Tenho uma função do Azure (isolada) com um gatilho do CosmosDB escutando alterações em um contêiner com milhares de documentos.
As alterações nos documentos são feitas por outra Função do Azure em execução em um Gatilho de Temporizador, que busca as alterações feitas em nosso CRM, as processa e aplica as alterações necessárias aos documentos do CosmosDB.
Na maioria das vezes, só precisamos lidar com 10-20 alterações por ciclo de timer, o que significa que nossa função acionada pelo CosmosDB recebe 10-20 itens de entrada para processar. Isso funciona maravilhosamente bem e não está causando nenhum problema.
Mas, de vez em quando, nossas necessidades comerciais exigem o processamento de 1000-2000 alterações em um determinado ciclo de timer. Isso significa que a Função do Azure do CosmosDB está recebendo cerca de 100 itens de entrada "por instância". Isso está causando timeouts para a função, pois o tempo de execução está ultrapassando o limite de 10 minutos para os planos de Consumo.
Estou ciente de que poderíamos mudar para um plano Premium, mas devido à carga variável nas funções, isso não faz sentido financeiro.
Existe uma maneira de configurar um limite para o número de documentos recebidos do nosso gatilho de alteração do CosmosDB que são processados por cada instância da função?
Por exemplo:
- 1000 alterações são feitas nos documentos do CosmosDB
- Quando o CosmosDB Trigger detecta essas alterações, ele as distribui em várias execuções para que apenas 50 documentos sejam manipulados por cada instância.