Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java in memory queue 
:(
    Опции темы
Samotnik
Дата 11.2.2015, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Привет.
Есть веб сервис, который принимает пачки запросов, он ложит их в очередь (in memory) и затем по одному берет и обрабатывает. Всё ок. Сейчас встал вопрос о том, что если с серваком будет что-то не так, то все пропадет и решили хранить в БД. 

Вопрос, что выбрать? Все что приходит в голову это jms или другой Message Brocker. Еще варианты? может поможет java queue executor? Может кто-то реально такую задачу делал, какие есть варики? Естетсвенно условий два, как можно проще и производительность не упала smile
PM MAIL   Вверх
Kircul
Дата 11.2.2015, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 1
Всего: 7



Вообще уже есть готовые сервисы которые выполняют описанную выше задачу. Например: Jesque (ничего не могу сказать про качество прорта на Java, я работал с оригинальным проектом на Ruby: Resque).

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

Это сообщение отредактировал(а) Kircul - 11.2.2015, 21:31
PM   Вверх
AntonSaburov
Дата 16.2.2015, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



IMHO - jms вполне приличное решение.
PM MAIL WWW ICQ   Вверх
Samotnik
Дата 17.2.2015, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



два больших, очевидных минуса ms:
1- невозможно соблюсти порядок в очереди, а это очень важно в рамках таска.
2 - сами данные довольно большие, может доходить по тысячи объектов с 10 полями. Разве он справится? На сколько я помню в body можно положить только текстовую небольшую информацию.
PM MAIL   Вверх
AntonSaburov
Дата 17.2.2015, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



1. Порядок решается вариантом размещения дампа времени в сообщение - кто раньше отправил, тот и прав.
2. Нормальный JMS может файлы по несколько мегабайт передавать вполне пристойно. И большое количество - это как раз нормально. У нас на таком механизме весьма нагруженные системы работают.
PM MAIL WWW ICQ   Вверх
Samotnik
Дата 17.2.2015, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(AntonSaburov @  17.2.2015,  17:27 Найти цитируемый пост)
1. Порядок решается вариантом размещения дампа времени в сообщение - кто раньше отправил, тот и прав.

может я что не так понял.
https://en.wikipedia.org/wiki/Java_Message_Service
Цитата

JMS queue
    A staging area that contains messages that have been sent and are waiting to be read (by only one consumer). Note that, contrary to what the name queue suggests, messages don't have to be received in the order in which they were sent. A JMS queue only guarantees that each message is processed only once.


PM MAIL   Вверх
AntonSaburov
Дата 17.2.2015, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Так тут вопрос возникает - есть такое требование, чтобы с одной стороны в базу (или еще куда) укладывалось очень быстро (и желательно асинхронно), а с другой стороны, чтобы в соответствии со временем "укладывания" обрабатывалось ?

Тогда надо задачу точнее сформулировать:
Нужно ли обрабатывать запросы синхронно или их обработку можно отложить и отдельным потоком обрабатывать уже с учетом времени "укладывания" в базу.
Можно так - сначала положили с дампом времени одним потоком (через JMS), а потом другой поток делает обработку. Выбирает те, которые легли уже какое-то время назад, чтобы брать не самые свежие, которые еще могут быть перепутаны из-за задержки, а с запасом.
PM MAIL WWW ICQ   Вверх
Tony
Дата 10.3.2015, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



Топикстартер, посмотрите Hazelcast.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
mbasil
Дата 13.3.2015, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



1. В JMS сообщения помимо текстовых могут иметь и такие типы:

MapMessage    Объект содержащий пары ключ-значение, например HashMap
BytesMessage    Поток не интерпретируемых системой байтов, двоичные данные 
StreamMessage    Потоковые данные,  читаемые последовательно
ObjectMessage    Сериализованный Java объект

Cериализация работает вполне пристойно.

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

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


Это сообщение отредактировал(а) mbasil - 13.3.2015, 17:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1188 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.