활동 Continuation
비즈니스 활동이라고도 하는 BAM 활동은 유형이 다른 여러 응용 프로그램에 스팬될 수 있습니다(예: 파이프라인, 두 개의 오케스트레이션, 업무용 응용 프로그램 및 다른 파이프라인). BAM 인프라는 개발자의 도움을 받아 여러 애플리케이션의 이벤트를 상호 연결할 수 있습니다. 다음 그림에 표시된 "연속"이라는 개념입니다.
애플리케이션
활동의 첫 번째 부분은 Sales 응용 프로그램에서 발생하며, 활동의 두 번째 부분은 Packaging & Assembly 응용 프로그램에서 발생하고, 마지막 배달 진행 과정은 Shipping 응용 프로그램에서 사용할 수 있습니다. 각 애플리케이션은 PO(구매 주문 번호), SO(판매 주문 번호) 및 UPS(배송 주문 번호)와 같은 현재 작업 단위에 대해 서로 다른 ID를 사용합니다. 여러 응용 프로그램 사이의 이벤트에 대한 상관 관계를 지정하려면 다음을 수행해야 합니다.
두 응용 프로그램에서 모두 사용할 수 있는 고유한 데이터 정보인 Continuation 토큰을 식별합니다(예: 교환 중인 메시지 파트).
첫 번째 응용 프로그램에서 EnableContinuation을 호출하고 Continuation 토큰을 현재 ActivityID와 함께 전달합니다.
두 번째 응용 프로그램에서 BeginActivity를 호출하지 않습니다.
ActivityID 대신 Continuation 토큰을 사용하여 두 번째 응용 프로그램에서 후속 이벤트를 모두 발생시킵니다.
다음 예제 코드는 세 개의 응용 프로그램에서 활동 Continuation을 사용하는 방법을 보여 줍니다.
Purchase Order 응용 프로그램
string oID="PO#123";
string soID="SO#265";
es.BeginActivity("PurchaseOrder",poID);
es.UpdateActivity("PurchaseOrder",poID,
"POReceived",DateTime.UtcNow,
"POAmount",100,
"CustomerCity","Seattle");
es.EnableContinuation(
"PurchaseOrder",poId,soID);
es.EndActivity("PurchaseOrder",poID);
Fulfillment 응용 프로그램
string soID="SO#265";
string upsID="UPS#97892";
es.UpdateActivity("PurchaseOrder",soID,
"POApproved",DateTime.UtcNow,
"ProductName","ProductA");
es.EnableContinuation(
"PurchaseOrder",soID,upsID);
es.EndActivity("PurchaseOrder",soID);
Shipping 응용 프로그램
string upsID="UPS#97892"
es.UpdateActivity("PurchaseOrder", upsID,
"POShipped",DateTime.UtcNow);
es.EndActivity("PurchaseOrder",upsID)
코드의 활동 Continuation 사용에 대한 다음 지침을 따르십시오.
사용자가 여러 응용 프로그램 작업을 동일 활동의 일부로 처리해야 하는 경우에만 Continuation을 사용하십시오. 각 응용 프로그램에 대해 별개의 활동을 사용하고 각 응용 프로그램의 작업이 최종 사용자에게 의미 있는 활동으로 사용되는 경우 활동 관계를 만듭니다.
응용 프로그램에서 작업 단위가 일대일 관계가 아니면 활동 관계를 사용할 수 있지만 Continuation은 사용할 수 없습니다(예: 판매 주문 하나에 대해 배송 항목이 여러 개인 경우).
DirectEventStream을 사용하여 BAM에 데이터를 동기식으로 전송하면 모든 관련 구성 요소에 ActivityID가 전파되므로 Continuation을 사용할 필요가 없습니다.
BufferedEventStream을 사용하거나 오케스트레이션으로부터 비동기식으로 BAM에 데이터를 전송하면 모든 구성 요소에 ActivityID가 전파되더라도 Continuation을 사용해야 합니다. 이 경우에는 ActivityID 앞에 고유한 문자열(예: 응용 프로그램 이름)을 붙여서 각 응용 프로그램에서 서로 다른 ActivityID를 사용해야 합니다. 여러 응용 프로그램의 데이터가 BAM에 무작위로 도착할 수 있으며 BAM은 올바른 쿼리 및 집계 결과를 보장하기 위해 오래된 이벤트는 숨겨야 하기 때문에 이 작업이 필요합니다.
Continuation에서는 추가 데이터 교환을 위해 응용 프로그램을 다시 작성할 필요가 없습니다.
참고 항목
BAM 동적 인프라
BAM API(BizTalk Server 샘플)
BAM 엔드투엔드(BizTalk Server 샘플)