메시지 배달 보장 및 안전한 배달

 

메시지 배달 보장 및 상태 일관성

상태 저장 과정을 나타내는 워크플로의 경우, 일반적으로 분산 트랜잭션을 사용하여 워크플로 인스턴스의 업데이트된 상태로 메시지를 처리하므로 메시지가 단 한 번 만에 처리되도록 보장합니다.Workflow Manager 1.0은 워크플로 인스턴스와 해당 메시지 간의 일관적인 상태를 유지하는 데 MSDTC를 사용하지 않습니다.대신 최고의 일관성 모델이 구현되어 있으므로 서비스 버스는 이를 바탕으로 확장성이 우수한 환경에서 인바운드 메시지를 한 번에 처리할 수 있습니다.하지만 이 경우 워크플로로 인바운드 및 아웃바운드 메시지를 처리하는 데 약간의 근본적인 차이가 발생될 수 있습니다.

인바운드 메시지(Notifications 끝점을 통해 전달됨 – 이전 내용 참조)는 200 상태 코드가 반환되는 한 무조건 워크플로에 배달됩니다.메시지는 MessageId가 같다면 멱등 방식으로 다시 시도될 수 있으므로 HTTP 전송의 안정성과 상관 없이 배달이 보장됩니다.내부적으로는, 메시지가 Notifications 끝점에 의해 수신되고 나면 워크플로에 배달될 때까지 서비스 버스에 지속적으로 저장됩니다.

워크플로가 메시지를 받으면 로드되어 실행을 시작하거나 다시 시작합니다.한 편의 워크플로가 실행되는 동안에는 HTTP 작업을 사용한 아웃바운드 메시지 전송과 같은 부차적인 작업이 수집되어 업데이트된 워크플로 상태가 올바르게 저장될 때까지 보관됩니다.업데이트된 워크플로 상태가 저장되면 처리를 마친 인바운드 메시지가 지속형 저장소에서 제거된 다음 부차적 작업이 실행됩니다.아웃바운드 메시지가 전송되는데 이 때 네트워크 문제나 프로세스 오류로 인해 보내지지 않을 경우 이어서 다시 시도됩니다.아웃바운드 메시지는 한 번 이상의 시도를 통해 결국은 보내지게 되므로 웹 서비스는 메시지를 멱등 방식으로 처리하도록 설계되어야 합니다.워크플로의 실행이 다시 시작되도록 응답이 워크플로로 다시 반환됩니다.