Каждое задание в моей системе принадлежит определенному идентификатору пользователя и может быть помещено в rabbitmq из нескольких источников. Мои требования:
- В любой момент времени на одного пользователя должно быть запущено не более 1 задания.
- Задания для других пользователей не должны задерживаться из-за накопления заданий для конкретного пользователя.
- Каждое задание должно быть выполнено хотя бы один раз. Каждое задание будет иметь максимальное количество повторных попыток и повторно вставляется в очередь (или, возможно, задерживается) с задержкой в случае сбоя.
- Сохранение последовательности заданий (для каждого пользователя) желательно, но не обязательно.
- Задания, вероятно, следует сохранять, так как мне нужно, чтобы они выполнялись хотя бы один раз. У вакансий нет срока годности.
- Любой из рабочих должен иметь возможность запускать задания для любого пользователя.
С учетом этих требований, я думаю, имеет смысл поддерживать единую очередь для каждого отдельного пользователя. Мне также понадобятся все рабочие, наблюдающие за всеми очередями пользователей и выполняющие задание для пользователя, чье задание в настоящее время нигде не выполняется (т.е. не более 1 задания на пользователя)
Будет ли это решение работать с использованием RabbitMQ в настройке кластера? Поскольку количество очередей будет большим, я не уверен, что каждый работник, наблюдающий за каждой пользовательской очередью, вызовет значительные накладные расходы или нет. Любая помощь приветствуется.