Разработка асинхронных Serverless функций с помощью функций ASP.NET Core Azure
Привет, читатели блога dev-gang!
Функции Azure
позволяют запускать serverless код, управляемый событиями, без управления инфраструктурой. Функции могут запускаться HTTP-запросами, расписаниями, изменениями базы данных, загрузкой файлов и т. д.
ASP.NET Core предоставляет упрощенный способ создания функций Azure
с использованием C# и .NET. В этом посте мы рассмотрим, как разрабатывать асинхронные функции Azure
с помощью ASP.NET Core.
Преимущества serverless функций
Некоторые ключевые преимущества использования serverless функций:
- Нет инфраструктуры для управления —
Azure
занимается предоставлением ресурсов и масштабированием. - Плата за выполнение — потребляйте только те ресурсы, которые вам нужны.
- Масштабирование на основе событий — функции плавно масштабируются в зависимости от спроса.
- Ускоренная разработка. Нет необходимости управлять потоками, соединениями и т. д.
Создание основной функции Azure ASP.NET
Давайте рассмотрим создание базовой функции, запускаемой HTTP, с использованием шаблона функции Azure
в Visual Studio.
- Создайте новый проект Функций
Azure
. - Выберите шаблон триггера HTTP
- Изменить метод запуска:
public static async Task<IActionResult> Run(HttpRequest req)
{
return new OkObjectResult("Hello World!");
}
Это вернет «Hello World!»
при доступе к URL-адресу функции.
Создание асинхронных функций
Чтобы сделать нашу функцию асинхронной, мы можем использовать ключевые слова async
и await
:
public static async Task<IActionResult> Run(HttpRequest req)
{
await Task.Delay(1000);
return new OkObjectResult("Hello World!");
}
Это задерживает ответ на 1 секунду для имитации задержки.
Сигнатура метода Run
возвращает задачу, позволяя выполнять ее асинхронно.
Доступ к запросу и ответу
Мы можем получить доступ к подробной информации о HTTP-запросе через параметр HttpRequest
:
var name = req.Query["name"];
return new OkObjectResult($"Hello {name}!");
При этом считывается параметр запроса имени и персонализируется ответ.
Мы также можем создать HTTP-ответ, вернув IActionResult или установив HttpResponse.
Триггеры функций и привязки
Функции могут запускаться таймерами, очередями, другими службами Azure
и т. д. Мы можем получить доступ к полезной нагрузке триггера через привязку параметров:
public static async Task Run(
[QueueTrigger("messagequeue")] string message,
ILogger log)
{
log.LogInformation(message);
}
Эта функция, активируемая очередью, обрабатывает сообщения очереди.
Привязки ввода и вывода упрощают доступ к сервисам, таким как хранилище BLOB-объектов, из функции.
Внедрение зависимости
ASP.NET Core Dependency Injection
позволяет внедрять сервисы в функции:
public class MyFunction
{
private readonly ILogger<MyFunction> logger;
public MyFunction(ILogger<MyFunction> logger)
{
this.logger = logger;
}
public async Task Run(...) {
logger.LogInformation("Function processed request");
}
}
Функциональный класс теперь может получить доступ к службе регистрации через DI.
- ASP.NET Core отлично подходит для написания функций Azure с помощью
.NET.
- Поддержка
async/await
обеспечивает эффективный асинхронный код. - Триггеры и привязки упрощают подключение к другим сервисам.
- Встроенные функции, такие как DI, обеспечивают слабосвязанные функции. С помощью функций
Azure
и ASP.NET Core вы можете быстро создавать масштабируемые приложения, управляемые событиями, без управления серверами. Узнайте подробнее об общих архитектурах ASP.NET Core.