2012-08-28 7 views
2

우리에게는 여러 하위 오케스트레이션이있는 주요 오케스트레이션이 있습니다. 모든 루트 오케스트레이션은 트랜잭션 유형입니다 : none, 따라서 모든 하위도 같은 성격입니다. 이제 주요 오케스트레이션의 상위 범위에서 예외가 발견되고 로깅과 같은 몇 가지 단계가 있습니다. 오케스트레이션은 App SQL의 메시지로 활성화됩니다. 따라서 예외가 발생할 때마다 웹 서비스에 연결할 수없는 것과 같은 간헐적 인 문제로 말합니다. 나중에 수동으로 다시 트리거합니다.Biztalk 예외 -자가 치유 오케스트레이션

나는 치유가 간헐적 인 문제를 말하면서 조건을 기반으로 메시지를 다시 초기화한다는 예외적 인 catch 블록에서 orch를 자체 치유되도록 수정하려고합니다. 응용 프로그램 문제 - null 참조 같은 것, orch는 절대로 작동하지 않으므로 메시지를 다시 보내지 않습니다.

보상이라고하는 개념이 있지만, 1이 실패한 경우 트랜잭션 기반의 조치를 취하는 단계이며 다른 단계 (대체 조치 또는 정리 수행)를 수행하는 단계입니다.

내가 가진 유일한 아이디어는 예외적 인 키워드를 기반으로 조회를하고 메시지를 다시 보내는 것으로 결정합니다. 그러나 일부는이 문제에 도전하거나 더 나은 접근 방법을 제안합니다.

답변

1

나는 항상 오프라인에서 오류를 처리하는 것이 더 낫다고 생각 해왔다. 따라서 오케스트레이션이 실패하면 종료하십시오. 그러나 종료하기 전에 메시지를 보내십시오. 이 메시지에는 오류를 일으킨 일시적인 문제점이있는 것으로 판명 된 경우 메시지 처리를 복구하는 데 필요한 모든 정보가 들어 있습니다. 메시지는 복구를 담당하는 "관리인"프로세스에서 사용할 수 있습니다.

이것은 Erlang OTP 프레임 워크가 고 가용성에 접근하는 방식과 유사합니다. 프로세스가 신속하게 실패하고 관리인 프로세스가 복구가 발생했는지 확인합니다.

관련 문제