(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como criar um Azure Function Queue-trigger em C#: passo a passo

João Barros 17 de September de 2026 4 min de leitura

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.