Справедливая очередь задач для Java EE - PullRequest
3 голосов
/ 25 октября 2010

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

Есть ли доступные решения? Я посмотрел на rabbitMQ и другие системы обмена сообщениями, но они не совсем удовлетворяют мою проблему. Как реализованы честные очереди задач?

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Я бы реализовал так:

Наличие в очереди прослушивателя очереди, который при поступлении сообщения проверяет, когда в последний раз была получена задача от данного пользователя; если время <1 сек. помещает его в очередь 1, если время <10 секунд ставит в очередь 2, если время <100 секунд ставит в очередь 3, в противном случае помещается в очередь 4. В этом случае слушатели будут иметь 4 очереди, которые будут обработка задач. </p>

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

1 голос
/ 25 октября 2010

Я не думаю, что это поведение существует изначально, но я мог видеть, что оно реализовано с некоторыми функциями RabbitMQ.

http://www.rabbitmq.com/blog/2010/08/03/well-ill-let-you-go-basicreject-in-rabbitmq/

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

Ваша политика может быть структурирована с использованием

  • отвечает basic.reject
  • с использованием {requiree = true}

Надеюсь, это поможет!

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