Очереди работ

Очереди работ достаточно сильно распространены в среде Ruby (например https://sidekiq.org/) и Python (например https://docs.celeryq.dev/). В JVM мире таких крупных проектов нет. Давайте рассмотрим почему.

Одна из самых типичных задач – отправка почты.

В JVM не проблема сделать асинхронную функцию внутри самой основной процедуры. В Ruby/Python из-за однопоточности это уже проблема, поэтому выделяется задача в отдельное хранилище и отдельные экземпляры приложения - обработчики их исполняют.

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

Ну, и третье: если в JVM подобные проблемы ожидаются, то чаще выделяется отдельный микросервис и там где-то внутри очередь. Если произошла ошибка, то сообщения отправляются в отдельную очередь ошибок. Есть некий скрипт, который позволяет добавить сообщения из очереди ошибок в основную очередь (после исправления причины ошибок).

Т.е. примерно те же самые задачи решаются, но из-за технических и организационных отличий по разному.