|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
Есть мой сервер (Spring Boot 2) и стороннее API. Мой сервер подключается к этому API через ActiveMQ (они предоставили свою библиотеку, через которую они все делают). Каждую секунду API шлет сообщения ко мне на сервер. Есть некий Handler, который это все ловит и даёт мне определенный события в определенных методах. Есть мой сервис (с транзакциями) который вызывается для обработки события в Handler. В каждом методе Handler-а я получаю List<Event>. И вот у меня дилемма. Передавать сервису весь лист и при этом если там возникает Exception(даже если это первый элемент), то все остальные элементы остаются не обработанными и происходит rollback. Или же передавать по одному элементу в сервис и тогда я смогу контролировать возникновение ошибки и в случае чего добавлять в некий кэш. Но что меня настораживает во втором варианте так это то что если придет лист из 500 элементов, то будет 500 раз открытие сессии для бд и закрытие. Что посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2019, 20:14 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
Учебники рекомендуют при прочих равных использовать coarse-grained web service. Хотя, случаи бывают разные. Ну и наверно когда не можешь определиться, следует начать с coarse-grained granularity, плюс не помешает разумная обработка исключений ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2019, 20:56 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
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.07.2019, 01:31 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
Tsyklop, Вы спрашиваете вопрос чисто бизнес логики. На который тут не ответят: - слать в базу пачкой в одной транзакции или в базу 500 коммитов и пачки нету? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 08:37 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
TsyklopВ каждом методе Handler-а я получаю List<Event>. И вот у меня дилемма. Передавать сервису весь лист и при этом если там возникает Exception(даже если это первый элемент), то все остальные элементы остаются не обработанными и происходит rollback. Так происходит только если бездумно вставлять везде @Transactional и/или декорировать checked exceptions. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 09:06 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
Sergunka А что мешает каждый евент гнать отдельно в месседж брокере. Если хотите слать листом, то надо еще промежуточный сервис который распаковывает лист и посылает его в другую очередь где консьюмеры его подхватывают и долбят по одиночке евенты. Что касает пула для бд и пула для пулэкзекьютора для выполнения пачки событий в консьюмере, то почитайте отдельно: database pool connection, message broker publisher/subscriber, pool executor Java. Я получаю данные сразу в Handler-е. Внутрь ActiveMQ я не лезу ибо дали либу которая все нужное делает за меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 09:27 |
|
Вызов сервиса один раз или же много?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловТак происходит только если бездумно вставлять везде @Transactional и/или декорировать checked exceptions. Что значит декодировать? в этом случае ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 09:30 |
|
|
start [/forum/topic.php?fid=59&fpage=25&tid=2121184]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 179ms |
0 / 0 |