Пагинация очереди JMS - PullRequest
       63

Пагинация очереди JMS

0 голосов
/ 28 января 2019

В моем приложении Java EE я использую JMS для хранения некоторых сообщений.Я хочу отобразить эти сообщения в разбитой на страницы JSF таблице.Как я могу получать сообщения из очереди в пакетном режиме?На данный момент я использую что-то вроде этого, но это не очень хорошо, потому что мне нужно перебирать много сообщений.

Можно ли этого достичь?Я использую JBoss с HornetQ.

browser = session.createBrowser(queue);
List<Message> messagesToReturn = new ArrayList<>();
final Enumeration<ObjectMessage> messages = browser.getEnumeration();
int messagesSoFar = 0;
int count = 0;

while(messages.hasMoreElements()) {
    ObjectMessage message = messages.nextElement();
    if (count >= offset) {
        messagesToReturn.add(new CGSQueueMessage(message));
        messagesSoFar += 1;
    }
    if (messagesSoFar == maxSelect) {
        break;
    }
    count += 1;
}
return messagesToReturn;

1 Ответ

0 голосов
/ 28 января 2019

В JMS API нет методов для получения сообщений из очереди пакетами для разбитого на страницы варианта использования, такого как ваш.

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

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

Кроме этого, вы можете сбросить все сообщения из браузера очереди во временный файл с произвольным доступом и извлечь из него результаты.

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

...