Расписание приложения Spring на Docker кластере - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно запланировать пакетное приложение Spring в кластере Docker с разными узлами.Я нашел решение set replicas = 1 в docker-compose, но, на мой взгляд, это не лучшее решение, потому что минимизирует потенциал Docker.

Некоторая помощь или совет?Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Если я вас правильно понимаю, вы хотите запустить несколько копий весеннего приложения (не имеет значения, управляется ли это docker, k8s, автономно и т. Д.).Затем вы хотите, чтобы фоновое задание было запущено только в одном экземпляре.Правильно?В этом случае я могу посоветовать вам взглянуть на ShedLock .

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

Она легко интегрируется в Spring.Например, запланированное пакетное задание может выглядеть следующим образом:

@Scheduled(cron = ...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {
   // do something
}

Для реализации распределенной блокировки могут использоваться различные опции, например MySQL, Redis, Zookeeper и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...