Можно ли использовать приложение-функция Azure для выполнения нескольких функций?

Я создал функцию Azure с помощью QueueTrigger. Здесь я планирую выполнять несколько функций всякий раз, когда в очередь Azure делается запись через ASP.NET Core WebAPI Controller.

public void Run([QueueTrigger(QUEUE_NAME, Connection = "StorageConnectionString")] string queueMessage)
{
    _log.LogInformation($"Azure Function App call started...: {queueMessage}");
    
    // Connect to the database and fetch the data via Stored Procedure
    
    // Bind the data to Excel spreadsheet
    
    // Upload the spreadsheet to Azure Blob Storage and get the filename
    
    // Send a mail to the recepient including link to the filename
    
    _log.LogInformation($"Azure Function App call completed...: {queueMessage}");
}

Я создал отдельный проект библиотеки классов, который содержит функции, необходимые для этого приложения-функции Azure. Я добавил ссылку на проект classlibrary в приложение-функция Azure и выполнил проверку с помощью одной функции для отправки почты.

Я хотел знать, является ли хорошей практикой выполнение списка функций в одном приложении-функции Azure или есть какие-либо другие хорошие варианты.

Может ли кто-нибудь дать свои рекомендации относительно этого сценария?

🤔 А знаете ли вы, что...
C# имеет механизм исключений для обработки ошибок и исключительных ситуаций.


42
1

Ответ:

Решено

Я не думаю, что это хорошая практика, я думаю, что функции должны быть простыми и повторяемыми на случай, если что-то пойдет не так. Вы можете немного расширить принцип единственной ответственности, но в этом случае я думаю, что вы зашли слишком далеко. Представьте, что почтовый сервер по какой-то причине не работает, и отправка почты каждый раз завершается сбоем. Ваша функция будет повторно поставлена ​​в очередь, и ей придется извлекать данные, привязывать Excel и загружать электронную таблицу снова и снова, чтобы снова не выполнить отправку почты. Потеряно много вычислений и хранилищ, возможно потерянные файлы, даже если вы не учитываете это. Поэтому я бы, по крайней мере, разделил его на две части и создал еще один триггер, когда файл отправляется в хранилище BLOB-объектов, и позволил бы другой функции обрабатывать отправку электронной почты в этом случае. Мои два цента.