2010-07-06 2 views
0

메시지의 호송 처리를 담당하는 주 관현악이 발생합니다. 이러한 메시지는 고객 집합에 속하며 오케스트레이션은 들어오는 메시지를 읽고 각 새로운 고객 ID에 대해 특정 고객의 메시지 처리를 담당하는 새 오케스트레이션을 시작합니다. 들어오는 메시지의 순서를 유지해야하므로 새로 만든 오케스트레이션은 메시지를 처리하고 주 관현회의 추가 메시지를 기다려야합니다.상위 오케스트레이션에서 여러 오케스트레이션을 시작하여 메시지를 전달하는 중

이 문제를 해결하기 위해 여러 가지 방법을 시도했지만 성공 적으로 구현할 수 없었습니다. 이것이 어떻게 수행 될 수 있는지에 대한 의견을 듣고 싶습니다.

감사합니다.

답변

0

원하는 것은 중첩 된 호송 집합입니다. 그 일을하는 것이 가능할 수도 있지만, 그것은 ... 상처받을 것입니다. 특히, 첫 번째 걱정은 유지 관리가 될 것입니다. 프로세스를 변경하면 목에 통증이 생길 수 있으며, 훨씬 더 나쁜 경우 배포가 실제로 너무 빨라집니다.

개인적으로, 나는 이것을 구현하고 가능한 한 호송을 피할 수있는 대체 방법을 찾으려고 노력할 것이지만, 그것은 당신의 특정 시나리오에 많이 의존 할 것입니다.

몇 가지 질문

, 당신이 괜찮다면 :

  • 당신의 주문 요구 사항은 무엇입니까? 예를 들어 하나의 수신 배치 또는 배치 전체에서 각 고객에 대해 주문 처리 만 필요합니까? 후자의 경우 마스터 오케스트레이션없이 할 수 있고 고객 당 단 하나의 convoy'd 인스턴스 만 강제 할 수 있습니까? 아직 좋지는 않지만, 일을 많이 단순화 할 가능성이 있습니다.

  • 주문 관련 오류 요구 사항은 무엇입니까? 처리를 완전히 중단해야합니까? 메시지를 저장하고 계속 하시겠습니까? 재 시도는 어떨까요?

  • 순전히 메시지 도착 시간을 기준으로 주문 하시겠습니까? 도착 시간에만 의존하는 대신 내부적으로 주문을 강요하기 위해 사용할 수있는 메시지가 있습니까?

  • 개별 메시지의 처리는 무엇을합니까? 주문 요구 사항은 특정 메시지가 처리 될 때 특정 전제 조건이 충족되는지 확인하기위한 것입니다 (예 : 메시지가 부모 앞에 자식을 처리해야하는 일부 트리 구조를 나타냄).

0

하위 오케스트레이션을 시작하기 위해 마스터 오케스트레이션이 필요하다고 생각하지 않습니다. 호송 패턴을 암시하는 마스터 오케스트레이션에 대해 이야기하고 있지 않다는 사실을 확신합니다. 그래서, 그렇다면, 내가 할 수있는 일이 여기 있습니다.

싱글 톤 오케스트레이션을 구현하는 방법에 대한 간단한 예제 here이 있습니다. 이 예에서는 한 번만 존재할 오케스트레이션을 설정하는 방법을 보여줍니다. 그것으로가는 모든 메시지는 영수증의 순서대로 나열되어 한 번에 하나씩 처리됩니다. 귀하의 예는 고객 ID로이 작업을 수행하고자한다는 점에서 다릅니다. 이것은 매우 간단합니다. 인바운드 메시지에서 고객 ID를 승격시키고 상관 유형에 추가하십시오. 이제 고객 당 하나의 오케스트레이션 인스턴스 만있을 것입니다.

싱글 톤의 문제점은 다음과 같습니다. 당신은 어떤 시점에서 그들을 죽여야 만합니다. 그렇지 않으면 탈주 된 오케스트레이션으로 영원히 살 수 있습니다. 그래서, 당신은 그들을 끝내야합니다.특정 고객이 마지막 메시지에 대해 오케스트레이션에게 특성 등을 통해 죽을 때 신호를 보내는 방법이 있으면이 작업을 수행 할 수 있습니다. 이것이 가능하지 않으면 타이머를 설정해야합니다. x 초 안에 메시지가 수신되지 않으면 orch를 종료하십시오. 이것은 모두하기는 쉽지만 좀비를 소개 할 수 있습니다. 좀비는 오케스트레이션이 종료 될 때 해당 고객의 다른 메시지가 들어올 때 발생합니다. 대개 대기 시간을 두 배로 늘리면 해결할 수 있습니다. 그럼에도 불구하고 가끔씩 좀비가 발생합니다.

메모 필드에서. 우리는이 작업을 수행했으며 실제로 장기적인 해결책은 아닙니다. 우리는 고객 정보 업데이트를 받고 있었으며 주문 처리를 보장해야했습니다. 우리는이 싱글 톤 접근법을 수행했으며 좀비 문제와 예외 문제로 인해 문제가있었습니다. Singleton 오케스트레이션이 예외를 throw하면 해당 고객에 대한 모든 향후 메시지에 대한 처리가 차단됩니다. 따라서 가능한 모든 예외를 처리하십시오. 실제 솔루션은 파 엔드 시스템에 업데이트 메시지의 타임 스탬프를 확인하고 마지막 업데이트보다 오래된 메시지를 삭제하는 것이 었습니다. 우리는이 방법을 원했지만 수신 시스템은이 추가 작업을 수행하기를 원하지 않았습니다.

+0

크리스. 나는 다른 방식으로 그것을 끝내었다. 아직 단일 오케스트레이션을 사용하여 메시지를 받고 새 오케스트레이션을 시작하지만 시작 오케스트레이션 셰이프는 필요하지 않습니다. 내가받는 메시지의 데이터에 따라 다른 하위 오케스트레이션을 시작해야하기 때문에이 주요 오케스트레이션이 필요합니다. –

+0

주문 처리는 어떻게 처리 했습니까? –