Каков рекомендуемый способ поставить в очередь сообщения "отложенного выполнения" через ServiceStack/Redis MQ?

Я хотел бы поставить в очередь сообщения для обработки только по истечении заданного промежутка времени (т. Е. Достигнута минимальная дата / время выполнения) и / или во время обработки сообщения отложить его выполнение до более поздней точки. вовремя (скажем, некоторые предварительные проверки не выполнены).

Например, происходит событие, которое определяет процесс, который должен быть запущен не ранее, чем через 1 час с момента начального события.

Существует ли какая-либо встроенная / предложенная модель для организации этого с использованием https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis?

2 ответа

Решение

Я бы, наверное, построил это в два этапа.

  1. Поставьте задачу в очередь в своей системе очередей, которая будет обрабатывать ее в постоянном хранилище: SQL Server, MongoDB, RavenDB.

  2. Попросите службу опрашивать ваши задачи "В очереди", когда они должны быть повторно вставлены обратно в очередь.

Вероятно, самый безопасный способ, так как вы не хотите потерять эти рабочие места предположительно.

Если вы используете RabbitMQ вместо Redis, вы можете использовать Dead Letter Queues, чтобы получить то же поведение. Очереди мертвых писем по сути являются перехватчиками для просроченных сообщений.

Таким образом, вы помещаете свои сообщения в очередь, не намереваясь обрабатывать их, и они имеют определенный срок действия в минутах. Когда они истекают, они попадают в очередь, из которой вы будете обрабатывать. Довольно приятный способ поставить вещи в очередь на потом.

Вы всегда можете использовать https://github.com/dominionenterprises/mongo-queue-csharp или https://github.com/dominionenterprises/mongo-queue-php или https://github.com/gaillard/mongo-queue-java который предоставляет отложенные сообщения и другие необычные функции.

Другие вопросы по тегам