У меня странная проблема с приоритетом весенней интеграции (или, по крайней мере, там, где я думаю, что все идет не так). У меня есть следующий поток:
IntegrationFlows
.from(fileReadingMessageSource,
c -> c.poller(Pollers.fixedDelay(period)
.taskExecutor(Executors.newFixedThreadPool(poolSize))
.maxMessagesPerPoll(maxMessagesPerPoll)))
.channel("alphabetically")
.bridge(s -> s.poller(Pollers.fixedDelay(100)))
.channel(ApplicationConfiguration.INBOUND_CHANNEL)
.get();
И приоритетный канал с емкостью 1'000:
@Bean
public PriorityChannel alphabetically(@Value("${inbound.sort.queue-capacity}") int capacity) {
return new PriorityChannel(capacity, Comparator.comparing(left -> ((File) left.getPayload()).getName()));
}
Я использую этот поток для чтения около 20'000 файлов из входного каталога. Все работает нормально, но после примерно 2000 файлов поток перестает работать, и он не собирает новые файлы.
Я думал, что стандартное поведение канала очереди состоит в том, что, когда он достигает емкости, он просто будет ждать освобождения емкости и примет следующие файлы, которые будут поставлены в очередь? Но я могу ошибаться ... Если это не так, и есть некоторый тайм-аут для файлов, которые будут выбраны опрашивателем и не будут иметь достаточно места в приоритетном канале, что бы вы предложили обойти? это?