Я использую POJO-фреймворк Spring, ориентированный на сообщения (и DefaultMessageListenerContainer
в частности), для прослушивания нескольких очередей и тем.
В случае одной очереди, в частности, есть необходимость замедлить скорость, с которой я осушаю очередь, порядка одного сообщения каждые пять минут. Фактическая обработка сообщений - это субсекундная операция, но я хотел бы, чтобы слушатель сидел без дела некоторое время между сообщениями.
Я придумал небольшой хак, но он явно неоптимальный: Я установил максимальный параллелизм на 1 и добавил Thread.sleep(...)
после обработки каждого сообщения. Я хотел бы найти способ использовать DefaultMessageListenerContainer
для ожидания между попытками получения, а не заставлять обработчик ждать во время обработки сообщения.
Я подумал, не существует ли ScheduledExecutor
, который мог бы помочь, но я понимаю, что дросселирование должно быть сделано там, где производятся задачи. Возможно, есть какой-то метод из DefaultMessageListenerContainer
, который я мог бы переопределить, чтобы достичь того, что мне нужно?