Я знаю, что могу использовать JMS и ActiveMQ, но мне действительно нужно что-то очень простое и без большого количества накладных расходов. Я провел некоторое тестирование с ActiveMQ и не очень понравилось выполнение очередей сохранения.Есть ли какая-либо блокировка Java-блокировки, которая может сохранять данные на жесткий диск при достижении предела
Что я ищу - это базовая реализация любой блокирующей очереди с возможностью хранения сообщения на жестком диске (в идеале), если достигнут предел определенного размера. Затем он должен иметь возможность читать сохраненное сообщение с жесткого диска и, если возможно, прекратить запись нового на жесткий диск (восстановление в памяти).
Мой сценарий очень прост - сообщения (json) поступают извне. Я делаю некоторую обработку, а затем отправляю их в другую службу REST. Проблема может возникнуть, когда целевая служба REST отключена или сеть между нами плохая. В этом случае готовые к работе события хранятся в очереди, которая потенциально может заполнить всю доступную память. Я не хочу/не должен писать каждое сообщение на HDD/DB - только те, которые не могут вписаться в память.
Спасибо!
То, о чем вы просите, не является «чем-то очень простым». Вы, наверное, хотите «что-то надежное». –
ehcache - это самый простой способ, с помощью которого я могу прозрачно перемещать данные и выключать диски. Если порядок очередей важен, вам придется самому это обработать. – Affe
Да, порядок очереди важен. Кроме того, когда я сказал - «что-то очень простое», я имел в виду, что мне не нужны кластерные решения для предприятий (потому что я могу использовать ActiveMQ). Вся магия должна произойти внутри 1 JVM. Дополнительная приятная функция - если JVM остановлена - заполняет очередь с жесткого диска, если есть какие-либо сообщения. – Alex