Проблема с потоками Spring Integration Dynamic Flows - PullRequest
0 голосов
/ 13 ноября 2018

Я создаю динамические интеграционные потоки на основе данных из базы данных.

Каталоги, которые нам нужны для опроса с шаблоном имени файла, находятся в базе данных

Например,

Instance, directory , filename 
ABC     , c:/input1  , test.txt
DEF     , d:/input2 ,  fresh.xlsx

У меня есть около 200-300 записей, так что я делаюсоздает поток интеграции для каждой записи, поскольку он будет иметь различный процессор и т. д.

для каждой записи

 IntegrationFlowBuilder flowBuilder =
                        IntegrationFlows
                                .from(new CustomFileReadingSource(input), consumer);

     flowBuilder.transform(new ObjectToJsonTransformer());

      flowBuilder.handle(o -> {

    //                System.out.println(o.getPayload());
                });
context.registration(flowBuilder.get()).register();

После того, как все они зарегистрированы, но когда я смотрю наVisualVM или журнал Я вижу только 8-10 потоков вместо 100 или 200.

из журнала

2018-11-13 16:00:41.399 [task-scheduler-3] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:41.587 [task-scheduler-10] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32)
2018-11-13 16:00:41.807 [task-scheduler-4] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:42.071 [task-scheduler-5] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:42.323 [task-scheduler-7] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:42.569 [task-scheduler-6] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:42.878 [task-scheduler-8] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:43.197 [task-scheduler-9] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:43.588 [task-scheduler-1] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:43.951 [task-scheduler-2] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:44.305 [task-scheduler-3] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:44.598 [task-scheduler-10] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32)
2018-11-13 16:00:45.031 [task-scheduler-4] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:45.414 [task-scheduler-5] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 
2018-11-13 16:00:45.974 [task-scheduler-7] INFO  c.b.m.p.f.b.LoggerSourceAdvisor.afterReceive(32) 

Как видите, только несколько потоков опрашивают поток

Может ли кто-нибудь помочь, почему он не создает потоки или какой-либо лучший способ достижения параллельных поллеров?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Это верно. Поскольку все Polling Ednpoints основаны на предопределенном глобальном ThreadPoolTaskScheduler с размером пула 10 по умолчанию: https://docs.spring.io/spring-integration/docs/5.1.0.RELEASE/reference/html/configuration.html#namespace-taskscheduler

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

0 голосов
/ 13 ноября 2018

См. документацию .

Планировщик по умолчанию имеет только 10 потоков.Обычно запланированные задачи выполняются непродолжительно, и в этом случае этого обычно достаточно;в противном случае либо увеличьте число потоков, либо добавьте исполнителя задач, чтобы планировщик передал работу другому потоку.

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