2016-10-12 8 views
0

저는 BPMN 2.0 (Camunda)의 세계에 새로운 것을 알았습니다. 아래에 설명 된 꽤 복잡한 워크 플로우를 모델링해야합니다. 어떤 도움을 주셔서 감사합니다!마지막 이벤트가 발생했을 때 이벤트 루핑을 중지하는 방법은 무엇입니까?

단일 프로세스에는 외부 시스템에서 작업 이벤트를 캡처 한 후 이벤트를 비동기 적으로 외부 시스템에 제출하고 POST 나머지 콜백 메커니즘을 통해 완료 상태를 기다리는 "이벤트 루프"가 있습니다. 작업 목록의 끝을 표시하는 특정 메시지가 수신 될 때까지 이러한 작업 이벤트는 여러 번 올 수 있습니다. 이 시점에서 주 프로세스는 모든 비동기 적으로 제출 된 작업이 완료되었는지 또는 아직 실행중인 작업이 완료 될 때까지 대기해야하는지 확인해야합니다. 작업 중 하나라도 실패하면 전체 프로세스가 실패로 표시되어야합니다.

답변

0

이 시나리오는 우리 고객의 구현 사례와 매우 유사합니다.

그러나 문제에 대해 다른 방식으로 생각해야합니다. Camunda 또는 그 전신 엔진 (Activiti)에는 내가 "내구성있는"메시지를 좋아할 수있는 기능이 없습니다. "내구성있는"메시지는 엔진이오고 찾아올 때까지 엔진 내에서 지속되는 메시지입니다. 일반적으로 JMS와 같은 pub/sob 메시지 플랫폼을 사용하는 경우에는 문제가되지 않습니다. 그러나 tcp를 통해 http를 통해 통신하는 경우 MESSAGES가 잘못되었거나 손실 될 수 있으므로 문제가 될 수 있습니다.

그래서 (사용자의 설명을 기반으로) tcp를 통해 http를 사용하여 n을 계획하고 있다고 가정합니다.

메시지를 잃지 않도록하려면 "루프"패러다임을 포기해야합니다. 루프가 있으면 메시지가 수신 될 때 프로세스 인스턴스가 수신 태스크를 기다릴 것이라고 보장 할 수 없습니다. 따라서 루프를 사용하는 대신 단일 인스턴스 프로세스를 고려해야합니다. 메시지 시작 이벤트의 경우 메시지 시작 이벤트에는 관련 인스턴스에서 상관 관계가있는 비즈니스 데이터 키가 포함됩니다.

기본 흐름

은 다음과 같습니다 :

흐름이 매우 간단하다는

enter image description here

공지 사항, 종료 후, 메시지를 수신 비동기 호출을하고 성공 메시지를 기다립니다.

들어오는 메시지가 목록 작업의 끝인지 여부를 결정하는 결정 게이트웨이가 있습니다. 이것이 발견되면, 동일한 상관 키로 활성 인스턴스를 조회하고 인스턴스 ti가 실패 또는 완료 될 때까지 기다립니다. 완료되면 최종 태스크 프로세스 인스턴스가 완료되고 적절한 감사 추적을 업데이트합니다.

인스턴스가 완료되지 못하면 "최종 태스크"인스턴스가 오류 조건을 처리합니다.

+0

고마워, 그렉! 나에게 매우 좋은 출발점이다. –

+0

걱정하지 마세요. Pelykh, 당신이 대답을 받아 들일 수 있고 upvote로 설정할 수 있다면 정말 감사하겠습니다. –

0

Activiti의 수신 작업을 사용하여이를 수행 할 수 있습니다.

http://www.activiti.org/userguide/#bpmnReceiveTask

나는 나의 작업 흐름에서 우리는 외부 응용 프로그램에서 입력 기다려야했다 비슷한 상황이 있었다. 대기 태스크를 사용할 수 있고 그 데이터를 수신하면 실행이 다음 단계로 이동하도록이 태스크를 명시 적으로 신호해야합니다.