Я создаю библиотеку, которая состоит из приложения Log4J, которое асинхронно отправляет события на удаленный сервер. Когда выполняется запись в журнал, appender асинхронно записывает событие в локальную очередь, которую пул потребителей затем извлекает и отправляет на удаленный сервер.
Полностью находящимся в памяти решением было бы создание BlockingQueue, которое решило бы проблему параллелизма. Однако я бы хотел, чтобы очередь сохранялась, чтобы, если удаленный сервер недоступен, я не увеличивал неограниченную очередь или не начинал отбрасывать сообщения в случае ограниченной очереди.
Я думал об использовании встроенной базы данных H2 для локального хранения событий, а затем использовал механизм опроса для извлечения событий и отправки на удаленный компьютер. Я бы предпочел использовать BlockingQueue, чем опрашивать таблицу базы данных.
Является ли JMS ответом?
EDIT:
Если ответом является JMS, и похоже, что так и будет, есть ли у кого-нибудь рекомендации относительно легкого встраиваемого решения JMS, которое можно настроить для приема только сообщений в процессе? Другими словами, я не хочу и, возможно, не буду иметь права открывать сокет TCP для прослушивания.
EDIT:
У меня сейчас есть ActiveMQ, и, похоже, он работает. Спасибо всем.