대량 전송 소비자에서 UseScheduledRedelivery를 구성 할 때. 무엇을 처리해야하는지에 대한 모범 사례는 무엇입니까?대량 전송을 위해 다시 시도를 구성 할 때 처리 할 예외
예외적 인 과충전이 처리됩니까? proberbly 복구 할 수있는 예외 목록이 있습니까?
대량 전송 소비자에서 UseScheduledRedelivery를 구성 할 때. 무엇을 처리해야하는지에 대한 모범 사례는 무엇입니까?대량 전송을 위해 다시 시도를 구성 할 때 처리 할 예외
예외적 인 과충전이 처리됩니까? proberbly 복구 할 수있는 예외 목록이 있습니까?
재 배달은 2 단계 재 시도입니다. 첫 번째 수준의 재시도 (재시도 정책)로 복구되지 않는 예외를 처리한다는 의미입니다.
기본적으로 메시지 데이터로 인해 발생하는 예외를 제외한 모든 항목을 다시 시도하려고합니다. 그러나 null 참조 예외조차도 재 시도의 대상이 될 수 있습니다. 예를 들어 데이터베이스가 있고 레코드를 가져 와서 null을 얻으려고합니다. 이것은 레코드가 아직 없기 때문에 가능하지만 큐를 생성하기위한 메시지가 있기 때문에 나중에 나옵니다. 그래서 경쟁 조건은 그러한 예외를 초래할 수 있습니다.
그러나 두 번째 수준의 재 시도는 다릅니다. 예를 들어, 자원 부족 (데이터베이스 부족 또는 무언가) 문제를 극복하기 위해이를 사용하려고합니다. 이러한 예외는 네트워크 시간 초과 예외 또는 데이터베이스 시간 초과 예외와 같이 매우 구체적입니다. 그러나 "목록"이 없으므로 시스템 설계를보고 첫 번째 수준의 재시도를 적용 할 위치와 두 번째 수준의 재시도를 사용하는 위치를 결정해야합니다.
모든 서비스가 아닌 매우 적은 수의 예외에 대해 모든 예외 및 재 배달에 대해 재 시도를 사용합니다. 보통 우리는 데이터베이스 타임 아웃을 얻은 후 재전송합니다.
일반적으로; 의도 한 예외 만 처리하면됩니다. 다른 사람들은 모두 던지십시오. – Stefan
예외 처리 지점은 발생해야하는 것을 기반으로 적절하게 조치를 취할 수 있다는 것입니다. 그것을 다루는 방법은 본질적으로 결정할 사항입니다. 예외를 처리하고 싶지 않거나 예외가 발생했을 때 수행 할 작업을 모르는 경우 ** 처리하지 마십시오. 예외를 throw하는 것은 본질적으로 발생한 오류 상태를 해결할 수있는 방법이 없다는 것을 의미합니다 (따라서 더 이상 의미있는 결과를 산출 할 수 없으므로 ** 실행을 중지 **하기 위해 예외가 throw되는 이유). – Flater
내가 말하고자하는 것은 분산 시스템에서 재시도 시도를 처리하는 것입니다. 교착 상태가 생기면. 그리고 100ms 후에 다시 시도해보십시오. 소비자가 재부팅중인 경우. 5 분 안에 시간 초과 및 작업을 중단합니다. 당신이 알지 못하고 방금받은 노력으로 밴을 되 찾을 수있는 예외가 있습니다. – aaron