2016-12-29 3 views
2

API에 대한 요청을 받았을 때 일련의 단계를 수행하고 싶습니다. 각 단계는 수표 또는 농축 물입니다. 각 단계는 성공하거나 실패 할 수 있습니다. 성공하면 다음 단계를 수행해야합니다. 실패하면 종료 단계가 실행되고 흐름이 완료됩니다. 그 때문에이 법안에 맞는 것으로 보이는 스프링 스테이트 머신을 고려했습니다.스프링 상태 머신 - 얼마나 많이 만들어야합니까?

나는 문서를 읽어와 함께 놀았지만, 몇 가지 저를 회피 한 :

  1. 가 요청하고 국가 기계 사이에 1 대 1 관계가되어야 함을 의미 모든 요청에 ​​대해 새로운 State Machine 인스턴스를 만듭니다. 또는 다음 요 청을 위해 기계를 재설정하여 완성 된 상태 머신을 어떻게 든 재사용해야합니까?

  2. 완성 된 State Machine을 정리하는 방법은 무엇입니까? State Machine 인스턴스를 제거하고 정리하는 방법은없는 것 같습니다. 요청 당 1 개를 만들면 프레임 워크가 어떻게 든 리소스를 처리하지 않으면 효과적으로 메모리 누수가 발생했습니다.

+0

스프링의 구현에는 익숙하지 않지만 설명서를 보면 각 시스템의 상태가 내부적으로 표시된다는 것을 알 수 있습니다 (상태가 컴퓨터 외부에 저장되는 것과 비교하면 ala State currentState = machine.start()'). 이것은 첫 번째가 완료되기 전에 두 번째 요청이 발생할 수 있기 때문에 여러 요청에서 단일 시스템을 사용하는 것을 배제합니다. 그걸로 –

+0

; 상태 기계가 필요합니까? 전제 조건을 충족하는지 만 확인하는 경우 간단한'if (! firstSuccess) return 실패; if (! secondSuccess) return failure;'충분하지 않습니까? –

+0

이 흐름을 지원하는 몇 가지 디자인이 있다고 생각합니다.그 중 하나가 SSM입니다. 그래서 그것을 시도하기 위해, 나는 그것을 선택했다. 요청과 상태 시스템 인스턴스간에 1 대 1이 있어야한다는 것에 동의합니다. 그러나 그것은 자원 통제에 대한 의문을 남긴다. 인스턴스를 재활용해야합니까? 아니면 폐기해야합니까? 그렇다면 어떻게? –

답변

2

질문에 대한 정확한 대답이 없으므로 여기에 몇 가지 의견을 남겨 둘 필요가 있습니다. 상태 머신은 개념이 너무 느슨하기 때문에 여러 가지 방법으로 작업을 수행 할 수 있습니다.

  1. 항목의 개념 속속 단계 한 다소 tasks 레시피 구현 방법에 관한 경우. dag 작업을 실행하고 부모 작업이 실패하면 컴퓨터가 오류 상태로 들어가 사용자에게 작업을 수정하고 계속하기 위해 컴퓨터를 요청할 수있는 기회를 제공합니다. statemachine-recipes-tasksstatemachine-examples-tasks. 이런 종류의 유스 케이스는 꽤 일반적인 새로운 레서피를 만드는 좋은 후보가 될 수 있습니다.
  2. 프레임 워크는 기계가 정지 된 후에 물건을 정리해야하고 결국 jvm은 쓰레기를 정리해야합니다. 비정상적인 것을 발견하면 gh 문제를 제기하십시오. 문제를 해결해 드리겠습니다.
  3. 우리는 기계를 재사용하고있는 statemachine-examples-eventservice 샘플을 가지고 있습니다. 그러나 저는 그 샘플을 다시 구현하고 있습니다. (작동하지만 더 잘 구현되어야합니다.) 내가 머리에서 만든 요리사가 말한대로 덤프는 SPR-15042입니다. 기계는 session 범위와 함께 사용할 수 없으며 풍부한 객체 (ssm이있는)가 직렬화되면 사물이 남쪽으로 이동합니다.
  4. 단계 흐름을 수행하는 상태와 선택 사항을 조합하는 것은 상대적으로 쉽습니다. 이것은 단지 재사용이 가능한지에 대한 질문 일뿐입니다. 따라서 일반 조리법은 좋은 것입니다. PR은 환영합니다 :)
  5. 스테이크 차트에 표시된 gh-240의 오류를 처리하기 위해 필요한 것은 고려해야 할 사항입니다.
  6. ssm이보다 일반적인 흐름 엔진으로 작동 할 수 있다면 몇 가지 질문이 있지만 완전히 새로운 프로젝트이므로 될 수없는 일일 것입니다. 대부분의 흐름을 별도의 조리법으로 처리 할 수 ​​있다고 생각했습니다.