ActiveMQ Тема Использование памяти - PullRequest
0 голосов
/ 14 октября 2011

Мне нужно опубликовать большое количество [только заголовков] сообщений, каждое из которых относится к уникальной категории.Подумайте:

A.B.C.D.E.F

В идеале, за исключением всех других соображений, я хотел бы опубликовать каждое сообщение по своей теме, но это может привести к тысячам тем.Преимущество заключается в очень простой модели подписчиков на основе подстановочных знаков.Я просто не уверен, каково базовое использование памяти одной темы и совокупное использование тысяч из них.

Для тюнинга, темы будут непостоянными и недолговечными.Если возможно, я также мог бы ограничить количество сообщений до 1 за один раз, когда старое сообщение будет отброшено.Сообщения будут публиковаться волнами каждые n секунд (обычно> 15 с).Это уменьшило бы использование памяти.

Моя альтернатива - публиковать темы, основанные на первых двух сегментах, например:

AB

и помещать остальные сегменты включевые заголовки.Подписчики тогда должны будут использовать комбинацию тематических подстановочных знаков и селекторов, чтобы подписаться на свои желаемые каналы.

У кого-нибудь есть понимание этого?

Спасибо!

// Николай

1 Ответ

0 голосов
/ 03 ноября 2011

Я настроил тест для измерения фактического потребления памяти темами.В двух словах:

  1. Я запускаю цикл с базовым количеством тем, созданных на лету через сеанс JMS.
  2. Во внутреннем цикле я вызываю System.gc (), а затем измерьте используемое пространство кучи.Это делается 10 раз с 10 с.пауза в конце каждого внутреннего цикла.
  3. Я вычисляю среднее использование кучи, отобранное во внутреннем цикле.
  4. Я увеличиваю базовое количество тем на 100.

Результаты выглядели так:

enter image description here

Таким образом, каждая тема занимала около 29,5 КБ пространства кучи.Обратите внимание, что я не потратил много сил на настройку политик назначения тем, которые могли бы несколько уменьшить это.

В целом, я не думаю, что это плохо, но я не думаю, что это масштабируется дочисла, которые я хочу, поэтому я использую Camel (как предложено boday ).

В основном, когда клиент подписывается с использованием подстановочного знака темы, я кеширую шаблон,Когда потребитель Camel получает сообщение [не-jms], он проверяет кэш и, если сообщение соответствует какой-либо из подстановочных знаков в кэше, он публикуется в соответствующей теме (которая будет создана динамически).Как только тема перестает получать публикации (так как в кэше удалены соответствующие символы подстановки), тема истекает и «GC'ed».

Работает довольно хорошо.

// Николас

...