Я настроил тест для измерения фактического потребления памяти темами.В двух словах:
- Я запускаю цикл с базовым количеством тем, созданных на лету через сеанс JMS.
- Во внутреннем цикле я вызываю System.gc (), а затем измерьте используемое пространство кучи.Это делается 10 раз с 10 с.пауза в конце каждого внутреннего цикла.
- Я вычисляю среднее использование кучи, отобранное во внутреннем цикле.
- Я увеличиваю базовое количество тем на 100.
Результаты выглядели так:
Таким образом, каждая тема занимала около 29,5 КБ пространства кучи.Обратите внимание, что я не потратил много сил на настройку политик назначения тем, которые могли бы несколько уменьшить это.
В целом, я не думаю, что это плохо, но я не думаю, что это масштабируется дочисла, которые я хочу, поэтому я использую Camel (как предложено boday ).
В основном, когда клиент подписывается с использованием подстановочного знака темы, я кеширую шаблон,Когда потребитель Camel получает сообщение [не-jms], он проверяет кэш и, если сообщение соответствует какой-либо из подстановочных знаков в кэше, он публикуется в соответствующей теме (которая будет создана динамически).Как только тема перестает получать публикации (так как в кэше удалены соответствующие символы подстановки), тема истекает и «GC'ed».
Работает довольно хорошо.
// Николас