Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Вызов сервиса один раз или же много?  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Есть мой сервер (Spring Boot 2) и стороннее API. Мой сервер подключается к этому API через ActiveMQ (они предоставили свою библиотеку, через которую они все делают). Каждую секунду API шлет сообщения ко мне на сервер. Есть некий Handler, который это все ловит и даёт мне определенный события в определенных методах. Есть мой сервис (с транзакциями) который вызывается для обработки события в Handler. В каждом методе Handler-а я получаю List<Event>. И вот у меня дилемма. Передавать сервису весь лист и при этом если там возникает Exception(даже если это первый элемент), то все остальные элементы остаются не обработанными и происходит rollback. Или же передавать по одному элементу в сервис и тогда я смогу контролировать возникновение ошибки и в случае чего добавлять в некий кэш. Но что меня настораживает во втором варианте так это то что если придет лист из 500 элементов, то будет 500 раз открытие сессии для бд и закрытие. Что посоветуете?
28 июл 19, 20:14    [21936340]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
ivanra
Member

Откуда:
Сообщений: 852
Учебники рекомендуют при прочих равных использовать coarse-grained web service. Хотя, случаи бывают разные. Ну и наверно когда не можешь определиться, следует начать с coarse-grained granularity, плюс не помешает разумная обработка исключений
28 июл 19, 20:56    [21936362]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
Sergunka
Member

Откуда:
Сообщений: 1877
Tsyklop
Есть мой сервер (Spring Boot 2) и стороннее API. Мой сервер подключается к этому API через ActiveMQ (они предоставили свою библиотеку, через которую они все делают). Каждую секунду API шлет сообщения ко мне на сервер. Есть некий Handler, который это все ловит и даёт мне определенный события в определенных методах. Есть мой сервис (с транзакциями) который вызывается для обработки события в Handler. В каждом методе Handler-а я получаю List<Event>. И вот у меня дилемма. Передавать сервису весь лист и при этом если там возникает Exception(даже если это первый элемент), то все остальные элементы остаются не обработанными и происходит rollback. Или же передавать по одному элементу в сервис и тогда я смогу контролировать возникновение ошибки и в случае чего добавлять в некий кэш. Но что меня настораживает во втором варианте так это то что если придет лист из 500 элементов, то будет 500 раз открытие сессии для бд и закрытие. Что посоветуете?


А что мешает каждый евент гнать отдельно в месседж брокере.

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

Что касает пула для бд и пула для пулэкзекьютора для выполнения пачки событий в консьюмере, то почитайте отдельно: database pool connection, message broker publisher/subscriber, pool executor Java.
29 июл 19, 01:31    [21936525]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 1019
Tsyklop,
Вы спрашиваете вопрос чисто бизнес логики. На который тут не ответят:
- слать в базу пачкой в одной транзакции или в базу 500 коммитов и пачки нету?
29 июл 19, 08:37    [21936573]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3258
Tsyklop
В каждом методе Handler-а я получаю List<Event>. И вот у меня дилемма. Передавать сервису весь лист и при этом если там возникает Exception(даже если это первый элемент), то все остальные элементы остаются не обработанными и происходит rollback.
Так происходит только если бездумно вставлять везде @Transactional и/или декорировать checked exceptions.
29 июл 19, 09:06    [21936579]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Sergunka

А что мешает каждый евент гнать отдельно в месседж брокере.

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

Что касает пула для бд и пула для пулэкзекьютора для выполнения пачки событий в консьюмере, то почитайте отдельно: database pool connection, message broker publisher/subscriber, pool executor Java.


Я получаю данные сразу в Handler-е. Внутрь ActiveMQ я не лезу ибо дали либу которая все нужное делает за меня.
29 июл 19, 09:27    [21936588]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Андрей Панфилов
Так происходит только если бездумно вставлять везде @Transactional и/или декорировать checked exceptions.

Что значит декодировать? в этом случае
29 июл 19, 09:30    [21936589]     Ответить | Цитировать Сообщить модератору
 Re: Вызов сервиса один раз или же много?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 1019
Tsyklop
возникает Exception
код где?
Ест веб сервис на порту. Есть сервисный слой или БЛ. Есть ИС и ее границы куда чужая не входит...
29 июл 19, 10:53    [21936653]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить