Spring Integration Java DSL: создавайте и уничтожайте потоки интеграции непрерывно - PullRequest
0 голосов
/ 26 февраля 2019

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

Таким образом, конфигурации потоков (например, конфигурация 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 и некоторые другие классы, но не нашел подходящего метода.

1 Ответ

0 голосов
/ 19 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...