Пружинный автомат "динамическая вилка"
Я пытаюсь смоделировать бизнес-процесс, используя машину состояний пружины. До сих пор я был очень успешным с этим, но я застрял на попытке моделировать динамический бит, где
- пользователь находится в состоянии A
- в этом состоянии он может создать короткую (предопределенную) задачу для другого пользователя (небольшой конечный автомат)
- эти пользователи должны в основном выполнить конечный автомат поток до конца
- должно быть возможным одновременное создание многих задач.
- пользователь возвращается в состояние A, как только все созданные им задачи завершены.
Вот графическое представление того, чего я пытаюсь достичь.
Я думаю, я мог бы сделать это, если бы я представлял каждую задачу как конечный автомат и так далее, но я бы предпочел не идти по этому пути, поскольку это усложнит приложение. В идеале у меня была бы только одна конфигурация конечного автомата.
В весенней ссылке я обнаружил, что псевдо-состояние форка может быть тем, что я ищу, однако официальный репо-пример покрывает только статическую конфигурацию ( https://github.com/spring-projects/spring-statemachine/blob/master/docs/src/reference/asciidoc/sm-examples.adoc#statemachine-examples-tasks), где каждая задача уже определена (T1, T2, T3). Однако для моих нужд приложения я хотел бы иметь возможность (во время выполнения) добавить "T4".
По сути, я хотел бы знать, могут ли мои требования быть выполнены с помощью одного конечного автомата и могу ли я использовать fork() для своих нужд. Если это не так, я буду рад любым советам, которые подтолкнут меня в правильном направлении.
1 ответ
Как я прокомментировал на выходных, если вам нужна "динамическая" конфигурация, то самый простой способ сделать это - использовать "интерфейсы динамического компоновщика", как и во всех других примерах. Он был в основном добавлен, чтобы иметь возможность использовать SSM вне контекста весеннего приложения. Рецепт задач использует эту модель, поскольку он поддерживает запуск группы DAG с использованием иерархических областей и субмашин.
Вам не обязательно нужен ответвление, так как если параллельные области вводятся с использованием начальных состояний, это эквивалентно. Однако вам нужно присоединиться, чтобы ждать параллельные регионы, чтобы присоединиться к их выполнению.
Хотя этот рецепт дает некоторую предысторию того, как это можно сделать, мы надеемся, что в нашей дорожной карте есть что-то лучшее, что должно добавить язык dsl, который должен значительно упростить создание таких пользовательских реализаций.