@Controller
public class QueueMonitorController {
@Autowired
private Executor executor;
@RequestMapping(value = "/queuesize", method = RequestMethod.GET)
public int queueSize() {
ThreadPoolExecutor tpe = (ThreadPoolExecutor)executor;
return tpe.getThreadPoolExecutor().getQueue().size();
}
}
Если вы можете предоставить боб как ThreadPoolExecutor
, то вам даже не нужен состав. Внутренняя реализация size()
в LinkedBlockingQueue
(которую использует ThreadPoolExecutor): AtomicInteger.get()
.
Так что нет необходимости проявлять креативность и создавать свои собственные механизмы, все это встроено. Основан на Spring 4.2, но не должен слишком сильно зависеть от версии.
Таким образом, основной целью является мониторинг очереди и отправка оповещения, когда очередь заполнена на 80%. Это не должно входить в ваш код, который отвечает за работу вашей бизнес-логики. Вы не должны делать хаки там, чтобы объяснить нехватку ресурсов. Если идея заключается в том, что вы должны ограничивать пользователей, когда очередь упакована, есть гораздо лучшие способы справиться с ними.
Поскольку идея состоит в том, чтобы сделать «легкий мониторинг», то есть нет попытки обработать В случае, когда очередь заполнена на 80%, решение для опроса будет достаточно легким. Учитывая, что исполнитель может быть легко введен в отдельный Controller
, он даже не испортит ваш «настоящий» код.