Моделирование рабочего процесса с периодическим заданием поверх Cadence

Случай использования:

У меня есть сущность (позиция заказа), на которую подписывается пользователь.

Сущность становится доступной один раз в месяц, скажем, до тех пор, пока пользователь не удалит сущность из своего списка, или сущность больше не будет действительной, например, истек срок подписки.

Таким образом, действительные состояния, в которых может находиться сущность: Доступны, Остановлены, Завершены.

Когда объект находится в доступном состоянии, я хочу проверить, можно ли его преобразовать в заказ, вызывая внешний API (периодически), и, если да, вызвать другой API для создания заказа. Эти API гарантированно являются идемпотентными по своей природе.

Сущность может быть остановлена ​​между периодом подписки и сделана доступной через некоторое время.

Мой подход:

Я обертываю API в Spring MVC, откуда я поддерживаю рабочий процесс Parent, который содержит ссылки на все дочерние рабочие процессы для отдельных объектов.

Уровень предоставляет следующий API POST (EntityId, State), который вызывает родительский рабочий процесс, который выполняет поиск в своем словаре, а затем передает необходимое действие, ссылаясь на дочерний рабочий процесс.

Каждому дочернему рабочему процессу может быть дан сигнал о переходе в вышеупомянутые состояния, и они дополнительно выставляют запрос в их текущее состояние.

Вопросов:

  1. Есть ли способ, которым это может быть смоделировано лучше?
  2. Если вместо этого мне придется менять период голосования, как раз в месяц, внешне, могу ли я это сделать? Поскольку обновления не разрешены в рабочих процессах, и Thread.sleep() внутри действия не рекомендуется подождать, что будет наиболее эффективным для достижения этой цели?

Я очень новичок в написании рабочих процессов, пожалуйста, предложите, если есть какие-либо ошибки, которые я сделал.

1 ответ

  1. Если количество сущностей на пользователя ограничено, вы можете хранить их все в одном рабочем процессе. Наличие детей в этом случае может добавить ненужную сложность.

  2. Я не понимаю, что вы подразумеваете под "обновления не допускаются в рабочих процессах". Рабочие процессы могут изменить свое состояние в любое время. Чтобы изменить период, я отправил бы сигнал с периодом в рабочий процесс, и он обновил бы период на основе этой информации о сигнале.

Другие вопросы по тегам