2012-09-17 2 views
1

카탈로그 게시 프로세스 에 대한 책임이있는 saga-service ProcessCatalog가 있습니다.NServicebus 및 서비스 구현을 통한 경쟁 조건

클라이언트 응용 프로그램에서 PublishCatalog 메시지를 보냅니다. 각 메시지에는 catalogid와 항목 목록이 들어 있습니다.

나는 catalogid를 SagaId로 선택했습니다.

ProcessCatalog 서비스는 적절한 다른 비즈니스 서비스를 정렬하는 장기 실행 비즈니스 프로세스입니다.

현재 카탈로그 항목 구성이 드라이브 게시 프로세스임을 염두에 두어 ProcessCatalog가 필요합니다. 동일한 사용자는 (itemList에 = {A, D를 PublishCatalog을 보내 (catalogId에 = 1 ITEMLIST = {A, B, C}) 다음 카탈로그를 조성을 변경 UI 버튼을 제 1 시간에 충돌 여부를 어떻게됩니까

, E}) UI 단추에 다른 시간을 클릭하여 동일한 CatalogId에 대해 다른 PublishCatalog를 보내시겠습니까?

내 ProcessCatalog 끝 점이 하나의 workerthread로 구성되어 있으면 모두 작동합니다 (내 생각 엔) . 그러나 workthread가 1보다 크고 2 메시지가 동시 처리되는 경우 어떻게됩니까? 두 번째 스레드가 첫 번째 스레드 전에 실행을 완료하면 어떻게됩니까?

저는 비즈니스 디자인 버그 또는 일반적인 기술적 인 문제인지 묻습니다.

답변

0

사가가 관리 상태이므로 두 메시지는 동일한 사가와 관련되어야합니다. 사가에서 각 메시지를 처리하고 충돌을 해결해야합니다. 비즈니스 규칙은 카탈로그 게시가 진행되는 동안 카탈로그가 변경되는 경우 수행 할 작업을 정의해야합니다.

사가가 완료 될 수 있고 다른 사가가 뒤따라 카탈로그를 수정할 수 있습니다. 일반적으로 제품 카탈로그의 경우 소비자는 현재의 내용만을 염두에두고 초기 게시 이후에 변경 사항을 흡수 할 수 있습니다. 출판 된 것을 얻기위한 노력이 많은 경우, 사가를 취소하고 다시 시작할 수 있습니다. 이 경우 사용자가 카탈로그를 가지고 놀 수 있고 완전히 만족할 때 커밋 할 수있는 모델링 도구로 UI를 전환해야 할 수도 있습니다.

+0

안녕하세요, 아담, 사업 적 관점에서 당신이 옳고 나는 당신의 견해를 이해했습니다. 그러나 내 의심은 경쟁 조건 시나리오와 관련이 있습니다. workthread가 1보다 크고 2 개의 메시지가 동시에 처리되면 어떻게됩니까? 두 번째 스레드가 첫 번째 스레드 전에 실행을 완료하면 어떻게됩니까? 사가 행을 카탈로그 ID와 관련하여 잠글까요? – Alberto

+0

동시성 문제가 있다고 생각하지 않지만 그렇게했다면 행에 대한 잠금이되고 첫 번째 수준의 재시도가 발생하며 처음으로 첫 번째 서비스가 제공됩니다. –