호위(convoy) 시나리오 작업
호송은 필요한 결과를 얻기 위해 여러 개의 단일 메시지를 관련시켜야 할 때마다 존재합니다. 순차 및 병렬의 두 가지 기본 유형의 호송이 있습니다.
특정 조건에서 오케스트레이션 인스턴스는 상관 관계가 지정된 메시지 그룹을 모두 동시에 받을 수 있습니다. 이 경우 그룹의 메시지 중 하나가 오케스트레이션 인스턴스의 상관 관계 집합을 초기화해야만 다른 메시지에 해당 오케스트레이션 인스턴스와 상관 관계가 지정될 수 있습니다.
동일한 오케스트레이션 인스턴스에서 상관 관계가 지정된 모든 메시지를 받을 수 있도록 BizTalk Server는 이러한 경합 상태의 가능성을 검색하고 해당 메시지를 호위로 처리합니다. 등록 시 런타임에서 일반 등록을 만들고 해당 등록을 호위의 일부로 식별합니다. 이 등록을 입력하면 메시징 엔진이 미리 정의된 상관 관계 속성 값을 기반으로 임시 등록을 만듭니다. 이 임시 구독을 호송 집합이라고 합니다. 호위 집합은 호위에 사용되는 상관 관계 집합 그룹입니다. 일반 등록과 일치하는 모든 후속 메시지가 호위 집합과 비교하여 평가되고 일치하는 메시지는 기존 포트로 라우팅됩니다.
비즈니스 프로세스에 호위 처리를 사용하는 경우 다음 사항을 고려하십시오.
상관 관계 집합은 메시지를 특정 비즈니스 프로세스로 라우팅하는 데 사용하는 특정 값이 있는 속성 목록입니다. Receive 셰이프에 사용되는 상관 관계 집합에는 상관 관계에 사용되는 세 개 이상의 속성이 포함될 수 없습니다. 이는 해당 값이 최대 3개의 매개 변수를 지원하는 데이터베이스 수준에서 식별되고 저장되기 때문입니다.
병렬 호위와 순차 호위는 동일한 비즈니스 프로세스에 함께 포함될 수 있지만 서로 상관 관계 집합을 공유할 수는 없습니다. 이는 각 상관 관계 집합이 한 개의 호위에만 속할 수 있기 때문입니다.
BizTalk Server 오케스트레이션 시작 셰이프를 사용하여 이미 초기화된 상관 관계 집합을 새 오케스트레이션에 전달하는 경우 호송 처리를 지원하지 않습니다. 이는 실행 중인 오케스트레이션 인스턴스에 관계없이 호위 집합이 데이터베이스 수준에서 처리되기 때문입니다.
단일 수신 셰이프를 사용하여 별도의 호송에 사용할 두 개 이상의 상관 관계 집합을 초기화할 수 없습니다. 예를 들어 수신 r1은 첫 번째 호위에 대해 상관 관계 집합 c1과 c2를 초기화하고 수신 r2는 두 번째 호위에 대해 c1을 따르고 수신 r3은 세 번째 호위에 대해 c2를 따른다고 가정합니다. 두 번째 호위에 의도된 호위 집합은 c1, r2이고 세 번째 호위에 의도된 호위 집합은 c2, r3이며 모두 r1에 의해 초기화됩니다. 이 경우 오케스트레이션 엔진은 해당 호위를 호위로 처리하지 않습니다. 이 예는 r2와 r3이 모두 c1과 c2를 따르거나(c1, r2, r3 및 c2, r2, r3), 둘 다 c1만 따르거나(c1, r2, r3), 둘 다 c2만 따르는 경우(c2, r2, r3)에 올바른 호위 시나리오가 됩니다.
호위를 사용하면 좀비라는 "손실된" 메시지가 발생할 수 있습니다. 실행 중인 오케스트레이션의 비활성 수신 등록이 MessageBox 데이터베이스의 메시지와 일치하면 MessageBox가 해당 메시지를 오케스트레이션으로 배달합니다. MessageBox는 오케스트레이션 내부의 비즈니스 논리를 모르기 때문에 등록과 일치하는 모든 메시지를 오케스트레이션에 배달합니다. 오케스트레이션 실행 흐름이 메시지를 사용할 수 있는 수신 등록을 통과할 때 이러한 메시지가 배달된 경우 해당 메시지는 좀비가 됩니다.
예를 들어 반복 내부의 수신은 17회 반복되지만 반복의 수신 등록과 일치하는 18개 메시지가 배달되는 경우 좀비가 만들어집니다. (MessageBox는 오케스트레이션 논리가 17개의 메시지만 처리한다는 것을 알지 못합니다.) 실행 흐름이 이미 루프를 종료했기 때문에 전달된 18번째 메시지는 오케스트레이션에서 사용되지 않습니다. 오케스트레이션은 폐기된 메시지(좀비)와 함께 완료되며, 오케스트레이션 인스턴스가 이미 완료되었으므로 이러한 메시지는 다시 시작할 수 없습니다.
WMI(Windows Management Instrumentation) 스크립트를 사용하여 "일시 중단됨(다시 시작 불가능)" 상태의 인스턴스를 쿼리하면 좀비를 관리할 수 있습니다. 또한 메시징 엔진은 "폐기된 메시지와 함께 완료됨"이라는 오류 메시지를 이벤트 로그에 씁니다.
또한 장기 실행 트랜잭션 범위의 순차 호위가 있고 범위에 시간 제한 설정이 있는 경우 일부 오케스트레이션 인스턴스가 "일시 중단됨(다시 시작 불가능)" 상태로 종료될 수 있습니다. 출력 메시지 수와 "일시 중단됨(다시 시작 불가능)" 인스턴스 수의 합이 입력 메시지 수보다 적습니다. 이 동작은 의도된 것입니다. 시간 제한 예외가 발생하면 코드가 예외 핸들러로 이동합니다. BizTalk Server는 예외 핸들러를 호출하여 좀비 처리를 비롯한 예외를 처리하도록 합니다. 예외 핸들러에서 송신 포트를 사용하여 추가 검토 및 처리를 위해 좀비를 대상으로 보낼 수 있습니다.
호위 이외의 시나리오에서 좀비를 생성할 수도 있습니다. 예를 들어 오케스트레이션 인스턴스가 비즈니스 프로세스에서 한 개의 응답 메시지를 예상하고 있는데 어떤 이유로 일치하는 등록 응답 메시지를 두 개 받는 경우를 가정합니다. 이 경우 두 번째 응답 메시지는 좀비가 됩니다. 또 다른 예는 한 분기에 수신 셰이프가 있고 다른 분기에 지연 셰이프가 있는 Listen 셰이프가 있는 경우입니다. 시간 제한이 발생하는 동시에 메시지가 도착하면 해당 메시지는 좀비가 됩니다.
좀비를 관리하는 방법에 대한 자세한 내용은 UI 지침 및 개발자 API 네임스페이스 참조에서 일시 중단된 서비스 인스턴스 제거를 참조하세요.