У меня есть требование, в котором мне приходится выполнять отложенное планирование в Redis. Задержка может быть в часах. Как обсуждалось в этом answer один способ достижения этой цели, как показано ниже: -Отложенное планирование в течение часа в Redis
- Добавить работу в отсортированный набор
- Диспетчерский поток, который проверяет отсортированные наборы каждые N секунд например -
ZRANGEBYSCORE jobs -inf, <current unix timestamp>
- Всякий раз, когда некоторые рабочие доступны шаг это к основному списку заданий, где основные рабочие рабочие являются blpop'ing.
- Удалить задания из отсортированного набора.
Может кто-нибудь предложить несколько способов, как я могу изменить приведенный выше подход для обработки ниже случая: -
Я не могу позволить себе потерять сообщение или дать дублирующие работу на основной рабочий поток. В приведенном выше подходе, если поток диспетчера умирает после прочтения сообщения из отсортированного набора, записывается в основной список заданий, но перед удалением сообщения из отсортированного набора. Затем сообщение будет доставлено дважды в основной список заданий?
Один из способов, о котором я могу думать, - это поток диспетчера писать в промежуточный список, а не в основной список. Еще один поток будет проверять промежуточный список за каждые N секунд. Всякий раз, когда доступна какая-либо работа, переместите ее в основной список, выполнив BRPOPLPUSH.
Может ли кто-нибудь предложить другой лучший и оптимальный способ?
Действительно ли вы хотите создать домашнюю систему массового обслуживания, если у вас есть много уже выполненных и работающих? RabbitMQ, привет? : D –
У нас уже есть один. Нам нужно добавить эту поддержку отложенного планирования. Из-за некоторых нетехнических проблем мы не можем перейти на rabbitmq сейчас. – tuk