0Pricing
C# Academy · Aula

Tratamento de erros e novas tentativas

Trate falhas com novas tentativas e filas de mensagens mortas.

Tratamento de erros e novas tentativas é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Falhas são normais

Os consumidores falham: por causa de um erro temporário no banco de dados, de um tempo limite em um serviço dependente ou de um erro causado por dados inválidos. O MassTransit oferece ferramentas em camadas (novas tentativas, reentrega e filas de erros) para que as falhas sejam tratadas de forma adequada, em vez de as mensagens serem perdidas.

Nova tentativa imediata

Para interrupções breves, configure uma nova tentativa para que o MassTransit reprocesse a mensagem algumas vezes em rápida sucessão antes de desistir.

cfg.ReceiveEndpoint("orders", e =>
{
    e.UseMessageRetry(r => r.Immediate(3));
    e.ConfigureConsumer<OrderConsumer>(context);
});

Novas tentativas por intervalo e exponenciais

Espaçar as novas tentativas ajuda quando a recuperação demora mais. Use intervalos ou um recuo exponencial, de forma semelhante ao Polly.

e.UseMessageRetry(r =>
    r.Exponential(5,
        minInterval: TimeSpan.FromSeconds(1),
        maxInterval: TimeSpan.FromMinutes(1),
        intervalDelta: TimeSpan.FromSeconds(2)));

Filtrando quais erros devem ser repetidos

Repita apenas em caso de exceções temporárias; não repita em caso de erros permanentes, como falhas de validação. Use Handle e Ignore para definir o escopo das novas tentativas.

e.UseMessageRetry(r =>
{
    r.Handle<TimeoutException>();
    r.Ignore<ValidationException>();
    r.Immediate(3);
});

Nova tentativa versus reentrega

Nova tentativa mantém a mensagem na memória e a reprocesa rapidamente. A reentrega (nova tentativa atrasada ou de segundo nível) devolve a mensagem ao intermediário para que seja entregue novamente muito mais tarde, liberando o consumidor nesse meio-tempo.

e.UseDelayedRedelivery(r =>
    r.Intervals(TimeSpan.FromMinutes(5),
                TimeSpan.FromMinutes(15),
                TimeSpan.FromMinutes(30)));

Combinando as duas camadas

Uma configuração robusta usa novas tentativas imediatas para interrupções breves e reentrega atrasada para indisponibilidades mais longas. Configure a reentrega fora das novas tentativas para que cada tentativa de reentrega também receba suas próprias novas tentativas imediatas.

e.UseDelayedRedelivery(r => r.Intervals(
    TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));

A fila de erros

Quando todas as novas tentativas e reentregas se esgotam, o MassTransit move a mensagem para uma fila de erros (com o nome <queue>_error). A mensagem é preservada com os detalhes da exceção para investigação, nunca descartada silenciosamente.

Falhas

Em caso de falha, o MassTransit também publica um evento Fault<T>. Outros serviços podem consumir as falhas para emitir alertas, registrar informações ou acionar uma compensação.

public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
    public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
    {
        // inspect context.Message.Exceptions
        return Task.CompletedTask;
    }
}

A idempotência é importante

Como novas tentativas e reentregas podem processar uma mensagem mais de uma vez, os consumidores precisam ser idempotentes: tratar a mesma mensagem duas vezes não deve cobrar duas vezes nem duplicar o trabalho. Use identificadores exclusivos e verificações de duplicidade.

Reprocessando a partir da fila de erros

Depois de corrigir um erro, você pode mover as mensagens da fila de erros de volta para a fila original para reprocessá-las, recuperando o trabalho que falhou anteriormente.

Filas de mensagens mortas e ignoradas

O MassTransit também usa uma fila de mensagens ignoradas (_skipped) para as mensagens que nenhum consumidor aceitou, ajudando você a identificar em produção tipos de mensagem roteados incorretamente ou inesperados.

Verificação rápida

Teste o tratamento de erros e as novas tentativas.

Recapitulação

O MassTransit organiza o tratamento de falhas em camadas: novas tentativas (imediatas ou exponenciais, com escopo definido por Handle/Ignore) para interrupções breves, reentrega para indisponibilidades mais longas e uma fila de erros para mensagens cujo processamento se esgotou, além de eventos Fault<T> para alertas. Como as mensagens podem ser processadas mais de uma vez, mantenha os consumidores idempotentes e reprocesse as mensagens a partir da fila de erros depois de corrigir os erros.

Perguntas Frequentes

A aula “Tratamento de erros e novas tentativas” é grátis?

Sim — o texto completo de “Tratamento de erros e novas tentativas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Tratamento de erros e novas tentativas”?

Trate falhas com novas tentativas e filas de mensagens mortas. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Tratamento de erros e novas tentativas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceitos de mensageria
  2. Produzindo e consumindo mensagens
  3. Sagas e fluxos de trabalho
  4. Tratamento de erros e novas tentativas
← Voltar para C# Academy