Приложение, над которым я работаю, получает уведомления от внешних систем, которые я хочу обрабатывать последовательно, поскольку у меня возникают некоторые тупики.
Я использую TaskExecutor из Spring, который является эквивалентом JDK 1.5Executor.
Я реализовал это следующим образом:
У меня есть Java-интерфейс, содержащий 1 метод:
public interface AsynchronousService {
void executeAsynchronously(Runnable task);
}
и соответствующую реализацию:
public class AsynchronousServiceImpl implements AsynchronousService {
private TaskExecutor taskExecutor;
@Override
public void executeAsynchronously(Runnable task) {
taskExecutor.execute(task);
}
@Required
public void setTaskExecutor(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
}
Вот конфигурация TaskExecutor.Я не уверен в этой конфигурации.Поскольку я хочу, чтобы уведомления выполнялись последовательно, я установил 1 для corePoolSize и maxPoolSize.Это означает, что только один поток будет создан в пуле потоков и будет извлекать уведомления последовательно из очереди.Я также установил «false» для «WaitForTasksToCompleteOnShutdown», чтобы не завершать работу после выполнения каждой задачи, а вместо этого, когда контекст весны разрушается.Я в целом прав с моими предположениями?
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="1"/>
<property name="maxPoolSize" value="1"/>
<property name="WaitForTasksToCompleteOnShutdown" value="false"/>
</bean>
Здесь я выполняю затем код:
asynchronousService.executeAsynchronously(new Runnable() {
@Override
public void run() {
someMethod.processNotification(notification)
}
});
Что вы думаете о моей реализации?Я что-то пропустил?Я не уверен, если / где мне нужно реализовать некоторую обработку ошибок?
РЕДАКТИРОВАТЬ: есть ли возможность весной настроить реализацию исполнителя задач для использования пользовательской очереди?Или насколько сложно расставить приоритеты для задач в очереди?Я посмотрел на некоторые реализации, но большинство из них реализуют executor-сервис из sratch без использования Spring.