2017-02-17 27 views
0

Я написал приложение «Отдых» на основе Spring MVC, в котором мне нужно выполнить некоторые проверки, некоторые из проверок - это жесткие правила, а некоторые из них - Soft правила. Мягкие правила, если они не сгенерируют предупреждение, но если жесткие правила не выполняются, они генерируют ошибку. Сначала я проверяю жесткие правила, если какой-либо сбой тогда, только в то время, я возвращаю ответ, но пусть процесс продолжит обработку последующих правил Soft.Публиковать настраиваемое событие и асинхронно обрабатывать его в Spring Rest на основе MVC

Здесь я хотел бы знать, как создать две параллельные потоки весной, чтобы это сделать? ИЛИ Как опубликовать пользовательское событие и асинхронно обрабатывать его в другом потоке и позволить исходному потоку продолжить работу весной?

Я знаю о @async и SpringTaskExecutor, но как их лучше всего использовать.

Я ищу конструктивные и архитектурные рекомендации и идеи для наилучшего решения этой задачи.

ответ

1

Как упоминалось, недействительность проверки правильных правил генерирует предупреждение, которое может обрабатываться в отдельном фоновом процессе. Таким образом, основной поток может сосредоточиться исключительно на жестком правиле (правилах), не беспокоясь о мягких правилах.

Для выше поведения ниже точек должны быть реализованы

  • Для каждого запроса сохраняются соответствующие данные, для мягкой обработки правила, с флагом processed=false и предпочтительно штампом времени (для вставки и обрабатывается).
  • Опубликовать данные, чтобы основной поток продолжался с обработкой жесткого правила.
  • Внесите запланированное обслуживание (через @Scheduled), которое будет периодически извлекать необработанные данные и маркировать их как processed=true после обработки мягких правил вместе с соответствующей обработанной меткой времени. (Это будет также выступать в качестве фонового процесса, который будет периодически опрашивать данные для необработанного правила (ов))

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

Сообщайте об этом в комментариях, если требуется дополнительная информация.

+0

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

+0

@JohnDoe. Нет необходимости в '@ Async', или накладывать новые потоки в качестве основного потока будет проверять жесткое правило ** только **, а проверка правильного правила будет выполняться фоновым процессом. –

+0

Также, как упоминалось в post, используйте '@ Scheduled' для фонового процесса. См. [Здесь] (https://spring.io/guides/gs/scheduling-tasks/) и [здесь] (https://docs.spring.io/spring/docs/current/spring-framework-reference/html /scheduling.html#scheduling-enable-annotation-support) для образцов. –