DeadLetterMonitor는 Pub/Sub 아키텍처에서 발생할 수 있는 일부 오류를 커스텀 규칙에 따라 자동으로 처리하는 도구입니다.
소비자의 예상치 못한 가동 중지 시간 후 재시도, 대상 서비스에 참조 데이터가 제대로 설정되지 않음, 구성 누락 등이 있습니다.
이 프로젝트는 구성된 모든 배달 못한 편지 대기열을 수신하고 재시도 패턴과 회로 차단기 패턴을 실행하는 간단한 배달 못한 편지 모니터 서비스를 구현합니다.
이는 메시지를 재시도해야 하는 횟수, 재시도 간 지연을 정의할 수 있는 간단한 규칙 집합을 구현합니다. 재시도되지 않은 메시지는 모두 삭제되거나 "주차장" 저장소로 이동되어 수동으로 처리됩니다.
모니터 엔진에 의해 처리되는 모든 배달 못한 문자 메시지는 일련의 규칙에 따라 메시지를 삭제, 재시도 또는 주차장으로 보내는 일반 처리기에 의해 처리됩니다.
삭제되도록 구성된 모든 메시지는 큐에서 삭제됩니다.
재시도되도록 구성된 모든 메시지는 원래 교환/주제로 전송되어 원래 구독자가 다시 처리합니다. 이 재시도는 인프라의 일시적인 문제가 이미 해결되었는지 확인하기 위해 지연을 사용하여 실행됩니다.
지연된 메시지 : 지연을 생성하기 위해 재시도할 모든 메시지는 delayed exchange and queue
, 즉 TTL 설정이 있는 대기열에 게시됩니다.
지연된 메시지 TTL이 만료되면 메시지는 메시지를 원래 대기열로 즉시 보내는 특정 처리기가 있는 Delayed Deadletter exchange and queue
로 자동으로 전송됩니다.
모든 구성은 appsettings.json
파일에 저장됩니다.
"DeadLetterMonitor": {
"MaxRetries": 2,
"DeadLetterQueues": "deadletter.queue",
"DelayedExchangeName": "delayed.exchange",
"DelayedQueueName": "delayed.queue",
"DelayedDeadLetterExchangeName": "delayed.deadletter.exchange",
"DelayedDeadLetterQueueName": "delayed.deadletter.queue",
"ParkingLotExchangeName": "parkinglot.exchange",
"ParkingLotQueueName": "parkinglot.queue",
"DelayValue": 10000,
"Rules": {
"Discard": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1",
"Retry": "work.exchange,Namespace.Abstractions.GenericEvent,rejected",
"Park": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1"
}
}
재산 | 설명 |
---|---|
최대 재시도 횟수 | 메시지당 최대 재시도 횟수 |
DeadLetter큐 | 쉼표로 구분된 배달 못한 편지 대기열 이름 |
지연된 교환 이름 | 지연된 교환 이름 - 지연된 메시지를 처리할 교환의 이름 |
지연된 대기열 이름 | 지연된 대기열 이름 - 지연된 메시지를 수신할 대기열의 이름입니다. |
DelayedDeadLetterExchangeName | 지연된 데드 레터 교환 이름 - 지연된 메시지를 처리할 교환 이름 |
DelayedDeadLetterQueueName | 지연된 배달 못한 편지 대기열 이름 - 지연된 메시지를 수신할 대기열의 이름 |
지연값 | 재시도를 위해 메시지를 다시 보내기까지의 지연 시간(초)입니다. |
주차장교환명 | 주차장 교환명 |
주차장대기열 이름 | 주차장 대기열 이름 |
규칙 | 모니터 엔진에 구현할 규칙 목록입니다. 각 규칙은 OriginalExchange MessageType 및 DeathReason 목록으로 구성된 필터를 사용하여 적용됩니다. 필터 목록은 쉼표로 구분됩니다. (예: work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - 이 필터는 메시지 유형이 Namespace.Abstractions 이고 DeathReason이 rejected1 인 Exchange work.exchange1 의 메시지에 규칙을 적용합니다.) |
규칙: 폐기 | 삭제할 메시지의 메시지 필터 목록입니다. 이 필터 기준과 일치하는 메시지는 자동으로 삭제됩니다. |
규칙: 재시도 | MaxRetries 에 도달할 때까지 재시도할 메시지의 메시지 필터 목록입니다. 이 필터 기준과 일치하는 메시지는 재시도를 위해 전송됩니다. |
규칙: 공원 | 직접 파크할 메시지의 메시지 필터 목록입니다. 이 필터 기준과 일치하는 메시지가 주차장으로 전송됩니다. |
프로젝트는 현재 *.Connectors
네임스페이스에 구현된 Azure Service Bus 및 RabbitMQ를 지원합니다. 사용할 커넥터를 지정하기 위해 AppSettings 파일에서 MessageBus( AzureServiceBus
또는 RabbitMQ
)에 대한 적절한 옵션과 관련 설정을 설정합니다.
이 프로젝트는 기여와 제안을 환영합니다.
DeadLetterMonitor에 기여할 수 있는 방법에 대한 전체 지침은 기여 가이드를 참조하세요.
이 프로젝트는 Microsoft 오픈 소스 행동 강령을 채택했습니다. 자세한 내용은 행동 강령 FAQ를 참조하거나 추가 질문이나 의견이 있는 경우 [email protected]으로 문의하세요.