Я сделал своего рода пользовательский Rss-Reader, используя Spring Boot Integration. Он читает мой RSS-канал каждые 5 секунд, и если есть новый элемент, он проходит через некоторые фильтры. Если он остается после фильтрации, на мой смартфон отправляется push-уведомление.Spring Boot Integration feed sleeps из-за неактивности
Это отлично работает, но если на моем канале нет новых элементов RSS в течение нескольких часов (не уверен, сколько именно времени), оно больше не срабатывает, когда через это время появляется новая запись RSS.
Я предполагаю, что мой InboundChannelAdapter переходит в какой-то режим sleep
. Кто-нибудь знает, какая именно проблема может быть?
У меня есть InboundChannelAdapter
, который читает мой RSS-канал:
@Bean
@InboundChannelAdapter(value = "feedChannel",
poller = @Poller(maxMessagesPerPoll = "100", fixedRate = "5000"))
public FeedEntryMessageSource feedAdapter() throws MalformedURLException {
Authenticator.setDefault(new Authenticator() {
return new FeedEntryMessageSource(new URL("an url"), "feedChannel");
}
У меня есть эти MessageChannel
и PollerMetaData
бобы:
@Bean
public MessageChannel feedChannel() {
return new QueueChannel(500);
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller() {
PeriodicTrigger trigger = new PeriodicTrigger(10);
trigger.setFixedRate(true);
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(trigger);
return pollerMetadata;
}
И в MessageEndpoint
, который принимает RSS уведомления:
@MessageEndpoint
public static class Endpoint {
private RestTemplate restTemplate = new RestTemplate();
private PushbulletConfig pushbulletConfig = new PushbulletConfig();
@ServiceActivator(inputChannel = "feedChannel")
public void log(Message<SyndEntry> message) throws Exception {
SyndEntry payload = message.getPayload();
//Do something with payload
}
}
Не уверен, что это r лифтинг, но .jar развернут в контейнере docker
, используя плагин se.transmode.gradle:gradle-docker:1.2
gradle
.
Спасибо! Я попробую это и проверю, исправлена ли проблема. Если нет, я обновляю сообщение с помощью журналов. – Kaj
«PollerMetadata.DEFAULT_POLLER» был использован конечной точкой '@ServiceActivator, кстати, но я удалил его и дал ему Poller с помощью' @ Poller' с теми же настройками, что и я, предоставленный '@ InboundChannelAdapter'. Не уверен, было бы лучше определить один и поделиться им между ними. – Kaj
Да, извините. Теперь я вижу, что ваш 'feedChannel' является' QueueChannel'. Это не имеет большого смысла в случае опроса адаптера в качестве начала. С другой стороны ваш 'fixedRate' с' 10ms' очень опасен только для 10 потоков в 'TaskScheduler' по умолчанию. –