Как сделать систему завершения аукционов?
Проблема: Есть аукционы с определенным временем завершения. В это время нужно проставить им статус и перестать принимать ставки. Взять оплату с покупателя и т.д. Как сделать завершение торгов? Мое решение: Сделать кэш вида Map<время окончания, акцион> и сделать задачу в отдельном потоке, которая будет брать значения по ключу из кэша и завершать ауцион.
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.execute(() -> {
while(true) {
doSomething
}
});
Я понимаю, что этот кусок будет увеличивать нагрузку на CPU. У кого-нибудь есть примеры более элегантного решения?
Ответы (1 шт):
Итак. Что я сделал. При старте нового аукциона, я стартую новую джобу с триггером, который выставлен на время окончания аукциона. Джоба берет все активные аукционы за время триггера и начинает их обрабатывать по очереди. В это же время, производя списания денег со счета победителя. При старте системы так же берутся все активные аукционы и на них заводятся джобы. Всё сделано с помощью Quartz.