오류 처리와 재시도
재시도와 배달 불가 큐로 장애를 처리합니다.
오류 처리와 재시도은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
실패는 정상입니다
소비자는 일시적인 데이터베이스 오류, 하위 시스템의 시간 제한, 잘못된 데이터로 인한 버그 등으로 실패할 수 있습니다. MassTransit는 재시도, 재전달, 오류 큐와 같은 계층화된 도구를 제공하므로 메시지를 잃지 않고도 실패를 우아하게 처리할 수 있습니다.
즉시 재시도
짧은 일시적 장애에는 재시도를 구성하십시오. 그러면 MassTransit가 포기하기 전에 짧은 간격으로 메시지를 몇 차례 다시 처리합니다.
cfg.ReceiveEndpoint("orders", e =>
{
e.UseMessageRetry(r => r.Immediate(3));
e.ConfigureConsumer<OrderConsumer>(context);
});간격 및 지수 재시도
재시도 사이에 간격을 두면 복구에 더 오랜 시간이 걸리는 상황에 도움이 됩니다. 폴리와 비슷하게 간격 또는 지수 백오프를 사용하십시오.
e.UseMessageRetry(r =>
r.Exponential(5,
minInterval: TimeSpan.FromSeconds(1),
maxInterval: TimeSpan.FromMinutes(1),
intervalDelta: TimeSpan.FromSeconds(2)));재시도할 오류 필터링
일시적인 예외만 재시도하고, 유효성 검사 실패와 같은 영구적인 오류는 재시도하지 마십시오. Handle과 Ignore를 사용하여 재시도 범위를 설정합니다.
e.UseMessageRetry(r =>
{
r.Handle<TimeoutException>();
r.Ignore<ValidationException>();
r.Immediate(3);
});재시도와 재전달 비교
재시도는 메시지를 메모리에 유지하면서 빠르게 다시 처리합니다. 재전달(지연 재시도 또는 2차 재시도)은 메시지를 브로커로 돌려보내 훨씬 나중에 다시 전달하도록 하며, 그동안 소비자를 해방합니다.
e.UseDelayedRedelivery(r =>
r.Intervals(TimeSpan.FromMinutes(5),
TimeSpan.FromMinutes(15),
TimeSpan.FromMinutes(30)));두 계층 결합
안정적인 구성에서는 짧은 장애에 즉시 재시도를 사용하고, 장기적인 장애에는 지연된 재전달을 사용합니다. 재전달을 재시도 바깥에 구성하면 각 재전달 시도에도 자체적인 즉시 재시도가 적용됩니다.
e.UseDelayedRedelivery(r => r.Intervals(
TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));오류 큐
모든 재시도와 재전달이 소진되면 MassTransit는 메시지를 오류 큐(이름은 <queue>_error)로 이동합니다. 메시지는 조사를 위해 예외 세부 정보와 함께 보존되며, 절대로 조용히 삭제되지 않습니다.
오류 이벤트
실패하면 MassTransit는 Fault<T> 이벤트도 게시합니다. 다른 서비스는 오류를 소비하여 알림을 보내거나 기록하거나 보상 작업을 시작할 수 있습니다.
public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
{
// inspect context.Message.Exceptions
return Task.CompletedTask;
}
}멱등성이 중요합니다
재시도와 재전달로 메시지가 두 번 이상 처리될 수 있으므로 소비자는 멱등성을 갖춰야 합니다. 같은 메시지를 두 번 처리해도 이중 청구나 중복 작업이 발생해서는 안 됩니다. 고유 식별자와 중복 제거 검사를 사용하십시오.
오류 큐에서 재생
버그를 수정한 후 오류 큐의 메시지를 원래 큐로 이동하여 다시 처리할 수 있습니다. 이를 통해 이전에 실패한 작업을 복구할 수 있습니다.
배달 불가 큐와 건너뛴 큐
MassTransit는 어떤 소비자도 처리하지 않은 메시지를 위한 건너뛴 큐(_skipped)도 사용합니다. 이를 통해 운영 환경에서 잘못 라우팅되었거나 예상하지 못한 메시지 형식을 쉽게 발견할 수 있습니다.
빠른 확인
오류 처리와 재시도를 테스트하십시오.
요약
MassTransit는 실패 처리를 계층화합니다. 짧은 장애에는 재시도(즉시 또는 지수 방식이며 Handle/Ignore로 범위 설정), 장기적인 장애에는 재전달, 처리가 모두 소진된 메시지에는 오류 큐를 사용하며 알림을 위해 Fault<T> 이벤트도 게시합니다. 메시지가 두 번 이상 처리될 수 있으므로 소비자는 멱등성을 갖춰야 하며, 버그를 수정한 후 오류 큐에서 메시지를 다시 재생하십시오.
자주 묻는 질문
“오류 처리와 재시도” 강의는 무료인가요?
네 — “오류 처리와 재시도” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“오류 처리와 재시도”에서 뭘 배우나요?
재시도와 배달 불가 큐로 장애를 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“오류 처리와 재시도” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 메시징 개념
- 메시지 생성 및 소비
- 사가와 워크플로
- 오류 처리와 재시도