Como criar um Azure Function Queue-trigger em C#: passo a passo
Este tutorial mostra como criar uma Azure Function com trigger para Azure Storage Queue em C# para processar mensagens de forma assíncrona. É útil para desacoplar componentes, lidar com picos de carga e integrar sistemas com fiabilidade.
Pré-requisitos
- Conta no Azure com permissões para criar recursos.
- Azure CLI instalada e autenticada (az login).
- Visual Studio Code ou Visual Studio com .NET SDK 7+.
- Azure Functions Core Tools (v4) para correr localmente.
- Extensão Azure Functions no VS Code (opcional).
Passo 1: Criar um Storage Account e uma Queue
A Azure Function vai ler mensagens de uma Azure Storage Queue. Primeiro criamos a Storage Account e a Queue no portal ou via CLI. Usamos a CLI porque é repetível e rápido.
az group create --name rg-func-queue --location westeurope
az storage account create --name funcqueuestorage$RANDOM --resource-group rg-func-queue --location westeurope --sku Standard_LRS --kind StorageV2
# Obter connection string
CONN=$(az storage account show-connection-string --name funcqueuestorage$RANDOM --resource-group rg-func-queue -o tsv)
# Criar a queue
az storage queue create --name myqueue --connection-string "$CONN"
Passo 2: Criar o projecto Azure Functions em C#
Criamos um projecto Functions com trigger Queue. Escolhemos o template QueueTrigger e Binding para Storage Queue.
dotnet new console -n FuncQueueApp -o FuncQueueApp
cd FuncQueueApp
func init --worker-runtime dotnet
func new --template "Queue trigger" --name QueueProcessor
O ficheiro gerado QueueProcessor.cs tem um método Run que recebe string message e um ILogger. Vamos ajustar a ligação à queue via application settings.
Passo 3: Configurar local.settings.json e a ligação ao Storage
Localmente definimos AzureWebJobsStorage para apontar para a Storage Account. Isto permite testar a Function com a queue criada.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=SEU_ACCOUNT;AccountKey=SEU_KEY;EndpointSuffix=core.windows.net",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
Substitua SEU_ACCOUNT e SEU_KEY pelos valores obtidos com az storage account keys list ou usando a connection string CONN do Passo 1.
Passo 4: Implementar a lógica de processamento
Editamos QueueProcessor.cs para processar a mensagem. Mantemos o exemplo simples: desserializar JSON e registar.
using System.Text.Json;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
public class QueueProcessor
{
[FunctionName("QueueProcessor")]
public void Run([QueueTrigger("myqueue", Connection = "AzureWebJobsStorage")] string myQueueItem, ILogger log)
{
try
{
var obj = JsonSerializer.Deserialize(myQueueItem);
log.LogInformation($"Processed message: {obj}");
// TODO: adicionar lógica de negócio (base de dados, chamada HTTP, etc.)
}
catch (Exception ex)
{
log.LogError(ex, "Erro a processar mensagem");
throw; // rethrow para deixar a mensagem ficar na queue ou ir para poison queue
}
}
}
Passo 5: Testar localmente
Corra a Function localmente e coloque uma mensagem na queue. Use Azure Storage Explorer ou a CLI para enfileirar uma mensagem JSON.
func start
# Noutra terminal, enviar mensagem
az storage message put --queue-name myqueue --content '{"id":1,"name":"teste"}' --connection-string "$CONN"
Verifique os logs do func start para ver a mensagem a ser processada.
Passo 6: Fazer deploy para o Azure (Function App)
Crie uma Function App no Azure e publique o código. Aqui usamos a CLI e o publish via zip deploy com func.
az functionapp plan create --name plan-func --resource-group rg-func-queue --location westeurope --number-of-workers 1 --sku EP1
az functionapp create --resource-group rg-func-queue --consumption-plan-location westeurope --name myfuncqueueapp$RANDOM --storage-account funcqueuestorage$RANDOM --runtime dotnet
# Publicar
func azure functionapp publish myfuncqueueapp$RANDOM
# Definir setting AzureWebJobsStorage no Function App com a connection string
az functionapp config appsettings set --name myfuncqueueapp$RANDOM --resource-group rg-func-queue --settings AzureWebJobsStorage="$CONN"
Após publish a Function App estará a ler mensagens da queue no Azure.
Verificar o resultado
Para confirmar que tudo está bem, envie uma mensagem para a queue e veja os logs da Function App. Use Azure Portal > Function App > Functions > QueueProcessor > Monitor para ver execuções. Verifique também se não há mensagens na queue ou se mensagens falhadas foram para a poison queue (myqueue-poison).
Conclusão
Agora tem uma Azure Function Queue-trigger em C# a processar mensagens da Azure Storage Queue localmente e no Azure. Próximos passos: adicionar retry/backoff, integrar com Azure Service Bus se precisar de funcionalidades avançadas, e criar testes automatizados. Dica: monitorize com Application Insights para diagnosticar problemas e erros comuns como connection string errada ou timeout de dependências.