Как я могу контролировать скорость, с которой Spring получает данные из очереди?

Я использую POJO-фреймворк Spring, ориентированный на сообщения (и DefaultMessageListenerContainer в частности), для прослушивания нескольких очередей и тем.

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

Я придумал небольшой хак, но он явно неоптимальный: Я установил максимальный параллелизм на 1 и добавил Thread.sleep(...) после обработки каждого сообщения. Я хотел бы найти способ использовать DefaultMessageListenerContainer для ожидания между попытками получения, а не заставлять обработчик ждать во время обработки сообщения.

Я подумал, не существует ли ScheduledExecutor, который мог бы помочь, но я понимаю, что дросселирование должно быть сделано там, где производятся задачи. Возможно, есть какой-то метод из DefaultMessageListenerContainer, который я мог бы переопределить, чтобы достичь того, что мне нужно?

7
задан Ray 19 January 2012 в 13:07
поделиться