LINUX.ORG.RU

Асинхронщина в Spring

 , ,


0

2

Дали тут вести большой проект на Спринге. Девелоперский сервер — голый Jetty, продакшен — кластерный WebSphere (не спрашивайте меня, почему так).

Возникла задача обрабатывать большое количество запросов в асинхронном режиме. Если б я разрабатывал проект с нуля, разумеется, выбрал бы кошерно-православный Java EE, а не этот набор костылей (Spring). В Java EE всё понятно: шлёшь сообщение в очередь JMS, а на том конце сидит MDB и всё обрабатывает (возможно, что в несколько потоков).

Но, увы, проект начинал не я, и на Java EE его уже не перепишешь. Так вот, вопрос: как подобная задача решается в Spring? Дружит ли он с JMS, и можно ли обойтись без JMS вообще (т.к. на devel-сервере никакого JMS нету)?


православный Java EE, а не этот набор костылей (Spring)

Скажи, что ты труллишь.

JMS

Ну натурально содомит. RabbitMQ, епта.

anonymous
()
Ответ на: комментарий от dizza

По теме есть что ответить?

Если что, вопрос был архитектурный. Естественно его задавать не гуглу, а сообществу.

про набор костылей, т.е. spring?

Ну, а что не так? :) Но, в любом случае, мне с этими костылями ещё не один десяток км предстоит пройти.

BYHYRT
() автор топика

Ну вроде как в spring есть даже jms template какой-то... Не пользовался. Думаю, вполне себе дружит.

Без JMS обойтись вообще можно - выше советовали RabbitMQ.

BattleCoder ★★★★★
()
Ответ на: комментарий от BYHYRT

Если что, вопрос был архитектурный. Естественно его задавать не гуглу, а сообществу.

Ну ты нашел где искать экспертного мнения. Сходил бы на StackOverflow лучше. Тут одни борщевики остались да хипстеры. Экспертов вытравили всех, днем с огнем не сыщешь.

Когда-то в development было мощное коммьюнити профессионалов, но сейчас это маргинальное болото, побулькивающее метаном.

anonymous
()

Если б я разрабатывал проект с нуля, разумеется, выбрал бы кошерно-православный Java EE, а не этот набор костылей (Spring)

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

По делу тут уже посоветовали JmsTemplate спринговый. http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/jms.html

Nagwal ★★★★
()

ThreadPool с очередью не хватит? Поддержка такого есть в виде например @Async аннотации

maxcom ★★★★★
()

Вполне не проблема в контроллере пулять запрос на MQ, и в том же сервисе его слушать. Пример даже в сорцах лора есть(см. индексацию в солр).

anonymous
()
Ответ на: комментарий от maxcom

ThreadPool с очередью не хватит? Поддержка такого есть в виде например @Async аннотации

Так и буду делать поначалу, эдакая недоJMS для бедных :) понятное дело, что ни о каком queue persistence, pubsub, in-order delivery тут речи не будет.

BYHYRT
() автор топика

Всем, кто советовал RabbitMQ — пацаны, для одной задачи поднимать цельную йобу на Ерланге? Вы представляете, сколько это проблем повлечёт с кластерным деплойментом, с безопасниками и т.п.

Так что поначалу буду делать как maxcom посоветовал, на ограниченном ThreadPool'e с очередью. Потом буду предлагать либо JMS (в WebSphere он встроенный, а разработчикам поднимать легковесный брокер), либо безброкерный солюшен типа ZeroMQ.

Всем спасибо!

BYHYRT
() автор топика
Ответ на: комментарий от BYHYRT

Хочется большего — можно много всякого притащить. Akka например, но это уже будет не spring. Ну или можно JMS реализацию встраиваемую взять.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Ну или можно JMS реализацию встраиваемую взять.

О! А такое есть?

ZeroMQ без нативной либы бывает?

хз, пока не курил, как раскурю — отпишусь здесь

BYHYRT
() автор топика
Ответ на: комментарий от BYHYRT

Ну или можно JMS реализацию встраиваемую взять.

О! А такое есть?

Например ActiveMQ на l.o.r именно так и запущен для простоты - прямо внутри веб приложения, настраивается Spring'ом. HornetQ, говорят, проще встраивается и в целом более подходит для встраиваемого применения.

maxcom ★★★★★
()

Хороший топик на StackOverflow: http://stackoverflow.com/questions/2507536/lightweight-jms-broker

Там рекомендуют:

В общем, есть где разгуляться.

BYHYRT
() автор топика
Ответ на: комментарий от maxcom

Круто, спасибо огромное. А какие use cases обслуживает ActiveMQ на ЛОРе, в трёх словах? знаю, что сорцы открыты, но из первых уст быстрее получится :)

Отправка емейлов? Долгоиграющие запросы на переиндексацию чего-нибудь? Уведомления о топиках?

BYHYRT
() автор топика
Ответ на: комментарий от BYHYRT

Сейчас используется только для построения / перестроения поискового индекса.

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

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Я таки угадал один пункт :) Последний вопрос, если ещё не надоел.

Почему здесь именно MQ, а не тот же самый ThreadPool? Несколько слушателей на разные типы индексов (pubsub)? Нужна гарантированная доставка, порядок и персистентность? Или задел на будущее (уведомления и т.п.)?

BYHYRT
() автор топика
Ответ на: комментарий от BYHYRT

Нужна минимальная персистентность. Чтобы рестарт веб-приложения не приводил к продалбыванию обновлений индекса.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Всё, теперь понятно. Спасибо и удачи! :)

BYHYRT
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.