2014-12-30 3 views
0

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

public void onMessage(final Message msg) { 
     process(msg); 
    } 

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

Спасибо!

+0

Единственное решение, которое я вижу, это иметь очередь, содержащую входящие сообщения JMS, и иметь планировщик, который быстро деактивирует его. Это очень дорого? Кажется очень шумным. –

+0

Это то, что я закончил, с единственным исполнителем потока, который планирует периодическую обработку буферизованных сообщений JMS в фиксированном темпе. –

ответ

0

После некоторой настройки, а не планирования периодической массовой обработки с фиксированной скоростью, я закончил планирование одной задачи с небольшой задержкой во время обратного вызова. Это позволяет достаточно времени для того, чтобы все связанные события попали в кеш. И как только все события в кеше обрабатываются навалом, кеш очищается, поэтому больше не нужно обрабатывать следующие запланированные задачи (одна задача запланирована во время каждого обратного вызова). Задача возобновится, как только кеш заполняется снова.

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

Смежные вопросы