Как остановить параллельное выполнение функции Azure Durable? - PullRequest
1 голос
/ 24 марта 2020

У меня есть проект Azure, где я работаю с относительно большими CSV-файлами. У меня есть две функции триггера:


  • Одна функция триггера должна получить файл из Azure хранилища BLOB-объектов, где этот файл превышает 100 МБ, и он должен делать меньшие куски и поместите их в Azure хранилище BLOB-объектов (в другом каталоге BLOB-объектов)

    Это функция оркестровки триггера

[FunctionName(nameof(FileChunkerOrchestration))]
public async Task Run(
  [OrchestrationTrigger] IDurableOrchestrationContext context, 
  ILogger log)
{
  var blobName = context.GetInput<string>();  
  var chunkCounter = await context.CallActivityAsync<int>(nameof(FileChunkerActivity), blobName);
}

Это функция действия

[StorageAccount("AzureWebJobsStorage")]
[FunctionName(nameof(FileChunkerActivity))]
public async Task<int> Run(
  [ActivityTrigger]IDurableActivityContext context,
  string fileName,
  [Blob("vessel-container/csv-files/{fileName}.csv", FileAccess.Read)]TextReader blob,
  [Blob("vessel-container/csv-chunks", FileAccess.Write)] CloudBlobContainer container)
{
  // Uses TextReader blob to create chunk files 
  // Then stores chunk by chunk (as soon as one chunk is created then it's being uploaded to Blob storage) in CloudBlobContainer container
}

  • Вторая функция триггера запускается на всех созданных чанках
[StorageAccount("AzureWebJobsStorage")]
[FunctionName(nameof(FileTrigger))]
public async Task Run(
  [DurableClient] IDurableClient starter,  
  [BlobTrigger("vessel-container/csv-chunks/{name}.csv")] Stream blob,
  string name,
  ILogger log)
{
  // Here the processing chunk files start            
}

Проблема в том, что вторая функция запускает все файлы фрагментов CSV и начинает работать параллельно, что приводит к тому, что мой проект использует слишком много доступной оперативной памяти.

Мне нужно исправить это так, чтобы моя вторая функция (это оркестровка) должна была обрабатываться файл за файлом.

Пожалуйста, поделитесь любой идеей, как преодолеть эту проблему, заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...