То, что вы ищете после этого, - это асинхронный «конвейер» работы, в котором разные работники находятся в одной линии и передают данные для обработки от одного к другому. Архитектура такого типа является удивительно гибкой и применяется к большому числу очень распространенных приложений
Лучший способ найти такую архитектуру для Grails - использовать очередь сообщений, например, RabbitMQ , с серией очередей (по одной на каждый шаг в конвейере). ), а затем попросите контроллер (и) поместить сообщения на первый этап конвейера.
Затем у вас есть работник (просто служба в приложении Grails, если вы используете превосходный плагин RabbitMQ Grails ), который прослушивает очередь, в которой хранятся задания для работы. Когда работа попадает в очередь, работник снимает ее, обрабатывает, а затем помещает сообщение в очередь следующего шага в конвейере.
Я обнаружил, что это лучший способ для проектирования почти любого асинхронного конвейера, поскольку он позволяет масштабировать каждый фрагмент по мере необходимости и не требует слишком больших накладных расходов. также также позволяет отделить задания от необходимости знать о следующем шаге в конвейере, но я обнаружил, что в большинстве случаев это действительно не нужно и просто добавляет бесполезную сложность.
Кварц отлично подходит для работ, которые должны выполняться по расписанию, но конвейер намного лучше обрабатывает вещи, поскольку он масштабируется