Создание пула заданий Java

#java #jakarta-ee #concurrency #connection-pooling

#java #джакарта-ee #параллелизм #соединение-объединение

Вопрос:

Мое приложение JavaEE app — это серверная служба мобильных клиентов, поэтому клиенты должны быть зарегистрированы в серверной службе, в процессе регистрации есть много процессов базы данных и различных видов заданий, для повышения производительности я планирую создать пул заданий, например, когда клиент регистрируется в серверной службе, их задания передаются вобъединяйте до тех пор, пока размер пула не станет полным. Если размер извлечения заполнен, задания будут обработаны… Есть ли какой-нибудь подходящий способ реализовать эту идею?

Спасибо,

Комментарии:

1. Зачем вам ждать, пока пул не заполнится, я бы просто поместил задания в JMS?

2. Моя главная цель — собирать задания и выполнять их за один раз,

3. Посмотрите, есть ли что-то вроде спецификации активации для вашего сервера приложений.

4. Кроме того, как объединение повысит производительность, объединив задания, которые вы создадите для просмотра загрузки.

Ответ №1:

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

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

Комментарии:

1. На самом деле, я пытаюсь быстро реагировать на клиентов, моя цель состоит в том, чтобы клиентам не нужно было ждать всех заданий…

2. Затем все, что вам нужно сделать, это выполнить фактическое задание асинхронно, например, с помощью AsynchrousEJB или очереди JMS, и немедленно вернуться обратно к клиенту. Это распространенный метод для более длительных запросов. В случае, если вам нужно сообщить клиентам об успешном выполнении задания, вы можете либо опросить их (в зависимости от количества клиентов, это может привести к высокой нагрузке), либо использовать что-то вроде WebSockets (если это возможно в вашей архитектуре).