Spring Integration Java DSL: непрерывно создавайте и уничтожайте потоки интеграции

Мои потоки настроены в базе данных, и моя программа постоянно создает и уничтожает потоки.

Таким образом, конфигурации потока (например, конфигурация cron) могут быть изменены в любое время.

Потоки регистрируются методом IntegrationFlowContext.register и уничтожаются методом IntegrationFlowRegistration.destroy.

Запуск потоков начинается с 0 секунды и может быть в любую минуту. Уничтожение и создание новых потоков начинается каждую минуту с 1 секунды.

Это хороший подход? Когда я это проверил, он работает. Но я думаю, хороший ли это способ сделать это, потому что какой-то поток может работать в то же время, когда он разрушен.

Псевдокод, например,

-at 13pm 00 minutes 00 seconds
      -run the flow for the customer X
-at 13pm 00 minutes 01 seconds
      -destroy all the flows (including the customer flow X)
      -register all the flows (including the customer flow X)
-at 13pm 01 minutes 01 seconds
      -destroy all the flows (including the customer flow X)
      -register all the flows (including the customer flow X)
-at 13pm 02 minutes 01 seconds
      -destroy all the flows (including the customer flow X)
      -register all the flows (including the customer flow X)
...
-at 13pm 59 minutes 01 seconds
      -destroy all the flows (including the customer flow X)
      -register all the flows (including the customer flow X)
-at 14pm 00 minutes 00 seconds
      -run the flow for the customer Y
-at 14pm 00 minutes 01 seconds
      -destroy all the flows (including the customer flow Y)
      -register all the flows (including the customer flow Y)

Редактировать:

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

Изменить 2:

Я могу упростить свой вопрос. Есть ли проблема, если какой-то поток удаляется методом IntegrationFlowRegistration.destroy во время его работы?

Изменить 3:

Я обнаружил, что поток не может быть удален с помощью метода IntegrationFlowRegistration.destroy, когда он запущен. Если одновременно выполняется несколько потоков, некоторые потоки не выполняются до конца.

Есть ли способ определить, работает ли какой-то поток? Я просмотрел класс IntegrationFlowRegistration и некоторые другие классы, но не нашел подходящего метода.


person Mike    schedule 26.02.2019    source источник
comment
Пожалуйста, ответьте на мою правку 3.   -  person Mike    schedule 05.03.2019


Ответы (1)


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

person Mike    schedule 19.03.2019