|
Модераторы: LSD, AntonSaburov |
|
Samotnik |
|
|||
Super star ! Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
Привет.
Есть веб сервис, который принимает пачки запросов, он ложит их в очередь (in memory) и затем по одному берет и обрабатывает. Всё ок. Сейчас встал вопрос о том, что если с серваком будет что-то не так, то все пропадет и решили хранить в БД. Вопрос, что выбрать? Все что приходит в голову это jms или другой Message Brocker. Еще варианты? может поможет java queue executor? Может кто-то реально такую задачу делал, какие есть варики? Естетсвенно условий два, как можно проще и производительность не упала |
|||
|
||||
Kircul |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: 1 Всего: 7 |
Вообще уже есть готовые сервисы которые выполняют описанную выше задачу. Например: Jesque (ничего не могу сказать про качество прорта на Java, я работал с оригинальным проектом на Ruby: Resque).
Сам сталкивался с этой задачей года 3 назад. Мы писали свой сервис с сохранением в MongoDB. Нам нужна была приоритизация задач, распределенное выполнение и резервирование выполняющих потоков. Найти сервис удовлетворяющий всем этим требованиям не удалось. Это сообщение отредактировал(а) Kircul - 11.2.2015, 21:31 |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
IMHO - jms вполне приличное решение.
|
|||
|
||||
Samotnik |
|
|||
Super star ! Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
два больших, очевидных минуса ms:
1- невозможно соблюсти порядок в очереди, а это очень важно в рамках таска. 2 - сами данные довольно большие, может доходить по тысячи объектов с 10 полями. Разве он справится? На сколько я помню в body можно положить только текстовую небольшую информацию. |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
1. Порядок решается вариантом размещения дампа времени в сообщение - кто раньше отправил, тот и прав.
2. Нормальный JMS может файлы по несколько мегабайт передавать вполне пристойно. И большое количество - это как раз нормально. У нас на таком механизме весьма нагруженные системы работают. |
|||
|
||||
Samotnik |
|
||||
Super star ! Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
может я что не так понял. https://en.wikipedia.org/wiki/Java_Message_Service
|
||||
|
|||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Так тут вопрос возникает - есть такое требование, чтобы с одной стороны в базу (или еще куда) укладывалось очень быстро (и желательно асинхронно), а с другой стороны, чтобы в соответствии со временем "укладывания" обрабатывалось ?
Тогда надо задачу точнее сформулировать: Нужно ли обрабатывать запросы синхронно или их обработку можно отложить и отдельным потоком обрабатывать уже с учетом времени "укладывания" в базу. Можно так - сначала положили с дампом времени одним потоком (через JMS), а потом другой поток делает обработку. Выбирает те, которые легли уже какое-то время назад, чтобы брать не самые свежие, которые еще могут быть перепутаны из-за задержки, а с запасом. |
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Топикстартер, посмотрите Hazelcast.
|
|||
|
||||
mbasil |
|
|||
Опытный Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
1. В JMS сообщения помимо текстовых могут иметь и такие типы:
MapMessage Объект содержащий пары ключ-значение, например HashMap BytesMessage Поток не интерпретируемых системой байтов, двоичные данные StreamMessage Потоковые данные, читаемые последовательно ObjectMessage Сериализованный Java объект Cериализация работает вполне пристойно. 2. Порядок обработки можно обеспечить легко, задав прзнак порядка, например числовой номер сообщения и код группы, а также общее количество. Все сообщения сохраняются в промежуточном хранилище до прибытия непрерывной последовательности ряда. Каждый обработчик должен проверять не получен ли полный набор и, при получении, делается окончательная обработка всех сообщений от первого до последнего в нужном порядке. 3. При включении постоянства JMS провайдер обязан гарантировать доставку даже в случае сбоев, а это весьма недурственно. Это сообщение отредактировал(а) mbasil - 13.3.2015, 17:02 |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |