То, что вы ищете, это базовая очередь сообщений. Есть много вариантов, но мой любимый для Grails - RabbitMQ. Плагин Grails достаточно хорош, и, по моему опыту, он хорошо работает.
В общем, очереди сообщений позволяют иметь N производителей (вещи, создающие рабочие места), добавляющих рабочие сообщения в очередь, а затем M потребителей вытягивают рабочие места из очереди и обрабатывают их. Когда работник завершает свою работу, он просто спрашивает очередь для обработки следующего задания, и если ее нет, она просто ждет очереди, чтобы дать ей что-то сделать. Очередь также отслеживает успех / неудачу обработки сообщений (вы можете контролировать это), так что вы не ' передать одно и то же сообщение нескольким работникам.
Это имеет то преимущество, что не полагается на опрос (так что вы можете начать обработку, как только что-то придет), и это также гораздо более масштабируемо. Вы можете увеличивать или уменьшать как своих производителей, так и потребителей по мере необходимости, отделяя входные данные от выходных данных, чтобы вы могли принять всплеск трафика, а затем пробиться через него, когда у вас есть ресурсы (работники).