다음을 통해 공유


게시 및 등록 아키텍처

게시/등록 디자인에는 다음과 같은 세 가지 구성 요소가 있습니다.

  • 게시자

  • 게시자 속성

  • 이벤트

    게시자에는 수신 위치로 들어오는 메시지를 게시하는 수신 포트, 메시지를 보내거나 다른 오케스트레이션을 비동기적으로 시작할 때 메시지를 게시하는 오케스트레이션 및 대상 응용 프로그램이나 전송에서 응답을 받을 때 메시지를 게시하는 간청/응답 송신 포트가 포함됩니다.

    BizTalk Server 활성화 및 instance 두 가지 기본 유형의 구독이 있습니다. 정품 인증 구독은 구독을 충족하는 메시지가 수신될 때 구독자의 새 instance 활성화하거나 만들어야 한다고 지정하는 구독입니다. 활성화 등록을 만드는 항목의 예로는 필터가 있는 송신 포트나 오케스트레이션에 바인딩된 송신 포트 및 활성화 속성이 True로 설정된 Orchestration Receive 셰이프를 들 수 있습니다. instance 구독은 구독을 충족하는 메시지가 이미 실행 중인 구독자 instance 라우팅되어야 했음을 나타냅니다. 인스턴스 등록을 만드는 항목의 예로는 상관 관계가 지정된 수신이 있는 오케스트레이션 및 BizTalk Server의 응답을 기다리고 있는 요청/응답 유형의 수신 포트를 들 수 있습니다.

    정보 수준의 이와 같은 두 등록 유형 사이의 차이점은 인스턴스 등록에 마스터 MessageBox 데이터베이스의 등록 테이블에 저장된 고유한 인스턴스 ID가 있다는 것입니다. 오케스트레이션 인스턴스나 수신 포트가 처리를 완료하면 활성화 등록은 오케스트레이션 또는 송신 포트가 등록되어 있는 한 활성 상태로 유지되는 반면 인스턴스 등록은 MessageBox에서 제거된다는 차이점도 있습니다.

구독 만들기

등록은 BizTalk Server의 서비스 클래스에 의해 만들어지며 BizTalk Server 관리 데이터베이스에 있는 adm_ServiceClass 테이블에 나열됩니다. 이러한 서비스에는 캐싱 서비스, 엔드포인트 관리자에서 호스팅하는 In-process 메시징과 Isolated 메시징, XLANG 하위 서비스에서 호스팅하는 오케스트레이션/XLANG 등이 포함됩니다. 이러한 모든 서비스 클래스는 등록을 만들고 게시된 메시지를 받을 수 있습니다.

등록은 등록별 메시지 컨텍스트 속성 및 값을 사용하는 비교 문(조건부) 컬렉션입니다. 예를 들어 메시지 유형은 메시지의 컨텍스트 속성이며 많은 등록이 해당 등록에서 메시지 유형을 지정합니다. 등록에 대한 일반 정보는 메시지 에이전트에 의해 등록 테이블에 삽입되며 특정 조건부는 등록에 대해 지정된 작업 유형에 따라 다음 조건부 테이블 중 하나에 삽입됩니다.

  • BitwiseANDPredicates

  • EqualsPredicates

  • EqualsPredicates2ndPass

  • ExistsPredicates

  • FirstPassPredicates

  • GreaterThanOrEqualsPredicates

  • GreaterThanPredicates

  • LessThenOrEqualsPredicates

  • LessThenPredicates

  • NotEqualsPredicates

    이 모든 작업은 애플리케이션 이름이 구독을 만드는 BizTalk 호스트의 이름>인 MessageBox 데이터베이스<에서 Bts_CreateSubscription_애플리케이션 이름 및 Bts_InsertPredicate_<애플리케이션 이름>> 저장 프로시저를 호출<하여 수행됩니다.

    송신 포트를 등록하면 이 포트는 해당 송신 포트 전송 ID가 컨텍스트에 있는 모든 메시지에 대해 하나 이상의 등록을 만듭니다. 이에 따라 송신 포트는 해당 포트용으로 만들어진 메시지를 항상 수신할 수 있습니다. 오케스트레이션 포트를 특정 송신 포트에 바인딩하면 해당 바인딩 정보가 BizTalk 관리 데이터베이스에 저장됩니다. 실제 송신 포트에 바인딩된 포트를 통해 오케스트레이션에서 메시지를 보내면 메시지가 해당 송신 포트로 라우팅되도록 전송 ID가 컨텍스트에 포함됩니다. 그러나 이 송신 포트가 오케스트레이션에서 보낸 메시지를 수신할 수 있는 유일한 송신 포트는 아닙니다. 오케스트레이션이 메시지를 보내면 해당 메시지가 모든 관련 승격 속성과 함께 MessageBox에 게시됩니다. 전송 ID가 컨텍스트에 있으므로 바인딩된 송신 포트는 항상 메시지 복사본을 받을 수 있지만 다른 송신 포트나 오케스트레이션은 메시지 속성도 일치하는 등록만 받을 수 있습니다. 메시지가 MessageBox에 직접 게시될 때마다 등록이 일치하는 모든 등록자가 메시지 복사본을 받게 됩니다.

게시 및 라우팅

등록을 만들어 설정한 다음에는 다른 처리 작업을 수행하기 전에 메시지를 게시해야 합니다. 메시지는 앞에서 언급한 서비스 중 하나에서 BizTalk Server로 전송되면 게시됩니다. 이 섹션의 라우팅 설명에서는 어댑터를 통해 BizTalk Server로 전송된 메시지를 중점적으로 다룹니다.

메시지가 수신 파이프라인 처리를 통과하면 속성이 메시지 컨텍스트로 승격됩니다. 메시지가 수신 어댑터 및 파이프라인에 의해 처리된 다음 MessageBox에 게시될 준비가 되면 메시지 에이전트가 먼저 승격된 속성의 속성 값 및 메시지 컨텍스트의 조건부 값을 마스터 MessageBox SQL Server 데이터베이스에 삽입합니다. 데이터베이스에 이러한 값이 있으면 메시지 에이전트가 라우팅 결정을 내릴 수 있습니다.

그런 다음에는 메시지 에이전트가 게시될 현재 메시지 일괄 처리의 등록을 찾을 것을 마스터 MessageBox 데이터베이스에 요청합니다. 이 시점에서 메시지는 아직 데이터베이스에 기록되지 않은 상태이며 컨텍스트의 속성만 기록되어 있습니다. MessageBox의 bts_FindSubscriptions 저장 프로시저는 위에 나열된 등록 및 조건부 테이블을 현재 메시지 일괄 처리에 대해 저장된 메시지 속성과 연결하여 쿼리합니다.

이 정보를 통해 메시지 에이전트가 bts_InsertMessage 저장 프로시저를 호출하여 등록이 있는 각 MessageBox 데이터베이스에 메시지를 한 번씩 삽입합니다. bts_InsertMessage 저장 프로시저는 먼저 구독 ID를 사용하여 호출됩니다. 이 첫 번째 단계에서 저장 프로시저는 구독 세부 정보 정보를 조회하고, 메시지가 호스트의 애플리케이션 속성과 일치하는지 확인하고, 상태에 따라 애플리케이션 특정 큐 또는 애플리케이션 특정 일시 중단된 큐에 메시지에 대한 참조를 삽입하여 메시지가 애플리케이션에 대한 보안 요구 사항을 충족하는지 확인하는 int_EvaluateSubscriptions 저장 프로시저를 호출합니다. 메시지 ID, 등록 ID, 서비스 ID 및 기타 등록 정보는 이 응용 프로그램에 대해 검색된 각 등록의 응용 프로그램별 큐 테이블에 삽입됩니다. 메시지가 삽입된 다음에는 메시지 속성 및 메시지 조건부 테이블에서 일괄 처리와 관련된 값이 지워집니다.

이어서 메시지의 각 파트에 대해 bts_InsertMessage 저장 프로시저가 호출됩니다. 첫 번째 호출에서 메시지 컨텍스트가 전달된 다음, 부분 수, 본문 부분 이름 및 ID와 같은 메시지에 대한 메타데이터와 함께 SPOOL 테이블에 삽입됩니다. 또한 메시지 본문 부분은 int_InsertPart 저장 프로시저를 사용하여 PARTS 테이블에 삽입됩니다. 그런 다음 bts_InsertMessage 저장 프로시저가 나머지 메시지 파트 각각에 대해 호출됩니다. 이때 이러한 메시지 파트는 PARTS 테이블에 유지되도록 int_InsertPart 저장 프로시저로 전달됩니다.

메시지가 라우팅되면 다음과 같은 테이블에 레코드를 삽입하여 메시지 및 해당 파트의 특정 인스턴스를 수신하는 각 서비스에 대해 참조가 추가됩니다.

  • MessageRefCountLog1

  • MessageRefCountLog2

  • PartRefCountLog1

  • PartRefCountLog2

    이러한 참조는 시스템에 더 이상 없는 메시지에 대한 메시지 데이터로 MessageBox가 가득 차지 않도록 주기적으로 실행하는 정리 작업에 의해 메시지 및 파트가 삭제되지 않도록 합니다. 충돌 및 잠금 문제를 줄이기 위해 두 개의 테이블이 사용됩니다.

    이제 메시지가 올바른 큐로 라우팅되고 Spool 및 Parts 테이블에 저장된 다음 응용 프로그램별 큐에서 참조되었으므로 응용 프로그램 인스턴스가 메시지를 큐에서 꺼내야 합니다. 각 호스트 인스턴스에는 BizTalk 관리 데이터베이스의 adm_ServiceClass 테이블에 구성된 간격으로 데이터베이스를 계속 폴링하는 큐 해제 스레드가 많이 있습니다. adm_ServiceClass 테이블에는 사용할 큐 해제 스레드 수를 나타내는 열도 있습니다. 각 스레드는 MessageBox 데이터베이스를 호출하고 실행 중인 호스트 애플리케이션에 적합한 bts_DequeueMessages_<애플리케이션 이름> 저장 프로시저를 호출합니다. 이 저장 프로시저는 잠금 의미 체계를 사용하여 지정된 시간에 큐에 있는 메시지에서 하나의 instance 및 하나의 큐에서 삭제 스레드만 작동할 수 있도록 합니다. 잠금을 받는 호스트 인스턴스는 메시지를 받은 다음 대상 하위 서비스로 메시지를 전달해야 합니다.

    메시지를 받는 서비스가 엔드포인트 관리자인 경우에는 송신 포트가 호출되거나 요청/응답 수신 포트의 응답 부분이 호출되고, 해당 서비스가 XLANG/s 하위 서비스인 경우에는 등록에 인스턴스 ID가 있는지 여부에 따라 오케스트레이션이 만들어지거나 등록을 서비스할 수 있도록 배치됩니다. 그런 다음 다른 서비스에 참조가 없는 경우 메시지 데이터를 삭제할 수 있도록 서비스에서 메시지 및 해당 파트에 대한 참조를 해제합니다.

참고 항목

메시지 엔진