MuleSoft-Mule 예외 처리

모든 프로젝트의 경우 예외에 대한 사실은 예외가 발생할 수밖에 없다는 것입니다. 그렇기 때문에 시스템 / 애플리케이션이 일관되지 않은 상태에 남아 있지 않도록 예외를 포착, 분류 및 처리하는 것이 중요합니다. 모든 Mule 애플리케이션에 암시 적으로 적용되는 기본 예외 전략이 있습니다. 보류중인 트랜잭션을 자동으로 롤백하는 것이 기본 예외 전략입니다.

뮬의 예외

예외 처리에 대해 자세히 알아보기 전에 개발자가 예외 처리기를 설계 할 때 가져야하는 세 가지 기본 질문과 함께 어떤 종류의 예외가 발생할 수 있는지 이해해야합니다.

어떤 운송이 중요합니까?

이 질문은 모든 전송이 다국적 성을 지원하지 않기 때문에 예외 처리기를 설계하기 전에 충분한 관련성이 있습니다.

File 또는 HTTP거래를 지원하지 않습니다. 그렇기 때문에 이러한 경우 예외가 발생하면 수동으로 관리해야합니다.

Databases지원 거래. 이 경우 예외 처리기를 디자인하는 동안 데이터베이스 트랜잭션이 자동으로 롤백 될 수 있음을 명심해야합니다 (필요한 경우).

의 경우 REST APIs, 올바른 HTTP 상태 코드를 반환해야한다는 점을 명심해야합니다. 예를 들어 리소스를 찾을 수없는 경우 404입니다.

사용할 메시지 교환 패턴은 무엇입니까?

예외 처리기를 설계 할 때 메시지 교환 패턴에주의해야합니다. 동기식 (요청-응답) 또는 비동기식 (fire-forget) 메시지 패턴이있을 수 있습니다.

Synchronous message pattern 요청-응답 형식을 기반으로합니다. 이는이 패턴이 응답을 예상하고 응답이 반환되거나 시간 초과가 발생할 때까지 차단됨을 의미합니다.

Asynchronous message pattern 이 패턴은 요청이 궁극적으로 처리 될 것이라고 가정하는 fire-forget 형식을 기반으로합니다.

어떤 유형의 예외입니까?

매우 간단한 규칙은 유형에 따라 예외를 처리한다는 것입니다. 예외가 시스템 / 기술 문제 또는 비즈니스 문제로 인한 것인지 아는 것이 매우 중요합니까?

예외가 발생했습니다. system/technical issue (예 : 네트워크 중단) 재시도 메커니즘에 의해 자동으로 처리되어야합니다.

반면에 예외가 발생했습니다. by a business issue (잘못된 데이터와 같은) 재시도 메커니즘을 적용하여 해결해서는 안됩니다. 근본적인 원인을 수정하지 않고 재 시도하는 것은 유용하지 않기 때문입니다.

예외를 분류하는 이유는 무엇입니까?

모든 예외가 동일하지 않다는 것을 알고 있으므로 예외를 분류하는 것이 매우 중요합니다. 상위 수준에서 예외는 다음 두 가지 유형으로 분류 할 수 있습니다.

비즈니스 예외

비즈니스 예외가 발생하는 주된 이유는 잘못된 데이터 또는 잘못된 프로세스 흐름입니다. 이러한 종류의 예외는 일반적으로 본질적으로 재 시도 할 수 없으므로 구성하는 것이 좋지 않습니다.rollback. 신청도retry근본적인 원인을 수정하지 않고 재 시도하는 것은 유용하지 않기 때문에 메커니즘이 의미가 없습니다. 이러한 예외를 처리하려면 처리가 즉시 중지되고 예외가 배달 못한 편지 대기열에 대한 응답으로 다시 전송되어야합니다. 작업에도 알림을 보내야합니다.

비업무 예외

비업무 예외가 발생하는 주된 이유는 시스템 문제 또는 기술 문제입니다. 이러한 종류의 예외는 본질적으로 재 시도 할 수 있으므로 구성하는 것이 좋습니다.retry 이러한 예외를 해결하기위한 메커니즘입니다.

예외 처리 전략

Mule에는 다음과 같은 다섯 가지 예외 처리 전략이 있습니다.

기본 예외 전략

Mule은이 전략을 Mule 흐름에 암시 적으로 적용합니다. 흐름의 모든 예외를 처리 할 수 ​​있지만 catch, Choice 또는 Rollback 예외 전략을 추가하여 재정의 할 수도 있습니다. 이 예외 전략은 보류중인 트랜잭션을 롤백하고 예외도 기록합니다. 이 예외 전략의 중요한 특징은 트랜잭션이없는 경우 예외도 기록한다는 것입니다.

기본 전략 인 Mule은 흐름에서 오류가 발생할 때이를 구현합니다. AnyPoint studio에서는 구성 할 수 없습니다.

롤백 예외 전략

오류를 수정할 수있는 해결책이 없다면 어떻게해야할까요? 해결책은 메시지를 재 처리하기 위해 상위 흐름의 인바운드 커넥터로 메시지를 보내는 것과 함께 트랜잭션을 롤백하는 롤백 예외 전략을 사용하는 것입니다. 이 전략은 메시지를 다시 처리 할 때도 매우 유용합니다.

Example

이 전략은 자금이 당좌 / 저축 계좌에 입금되는 은행 거래에 적용될 수 있습니다. 여기서 롤백 예외 전략을 구성 할 수 있습니다. 트랜잭션 중에 오류가 발생하는 경우이 전략은 메시지를 처음으로 롤백하여 처리를 다시 시도하기 때문입니다.

예외 전략 포착

이 전략은 부모 흐름 내에서 throw되는 모든 예외를 포착합니다. 부모 흐름에서 발생하는 모든 예외를 처리하여 Mule의 기본 예외 전략을 재정의합니다. 예외 포착 전략을 사용하여 예외가 인바운드 커넥터 및 상위 플로우로 전파되는 것을 방지 할 수 있습니다.

이 전략은 또한 예외가 발생할 때 흐름에 의해 처리 된 트랜잭션이 롤백되지 않도록합니다.

Example

이 전략은 대기열에서 메시지를 처리하는 흐름이있는 항공편 예약 시스템에 적용 할 수 있습니다. 메시지 보강 기는 좌석 할당을 위해 메시지에 속성을 추가 한 다음 메시지를 다른 대기열로 보냅니다.

이제이 흐름에서 오류가 발생하면 메시지에서 예외가 발생합니다. 여기서 예외 포착 전략은 적절한 메시지가있는 헤더를 추가하고 해당 메시지를 흐름에서 다음 대기열로 푸시 할 수 있습니다.

선택 예외 전략

메시지 내용에 따라 예외를 처리하려는 경우 선택 예외 전략이 최선의 선택이 될 것입니다. 이 예외 전략의 작동은 다음과 같습니다.

  • 먼저 부모 흐름 내에서 throw 된 모든 예외를 포착합니다.
  • 다음으로 메시지 내용과 예외 유형을 확인합니다.
  • 마지막으로 메시지를 적절한 예외 전략으로 라우팅합니다.

선택 예외 전략 내에 정의 된 Catch 또는 Rollback과 같은 둘 이상의 예외 전략이 있습니다. 이 예외 전략에 정의 된 전략이없는 경우 메시지를 기본 예외 전략으로 라우팅합니다. 커밋 또는 롤백을 수행하거나 활동을 소비하지 않습니다.

참조 예외 전략

이는 별도의 구성 파일에 정의 된 공통 예외 전략을 나타냅니다. 메시지에서 예외가 발생하는 경우이 예외 전략은 전역 catch, 롤백 또는 선택 예외 전략에 정의 된 오류 처리 매개 변수를 참조합니다. 선택 예외 전략과 마찬가지로 커밋 또는 롤백을 수행하거나 활동을 소비하지 않습니다.