스프링 통합을 사용하는 RSS 피드 리더가 있습니다. 나는 RSS 항목의 출처를 배우고 싶다.스프링 통합 소스에서 rss feedChannel SyndEntry 메시지를 가져 오는 방법은 무엇입니까?
예 항목 :
- 제목 : "최고 일반 : 리비아에 필요한 더 많은 지상군"
- 링크 : "cnn.com/blabla"
- pubDate의 "2016년 6월 22일 10 : 10 : 10 "
init() 함수에서 설정했기 때문에이 항목을 보내려는 RSS 링크를 알고 싶습니다.
결과 : http://rss.cnn.com/rss/edition.rss
가 여기 내 공급 채널 설정이다.
@Bean
public MessageChannel feedChannel() {
return new QueueChannel(500);
}
이것은 동적 피드 채널 크리에이터입니다. DB에서 rss 링크를 읽고 채널을 만듭니다.
@PostConstruct
public void init() throws Exception{
List<RssLink> rssLinks = rssLinkService.findAll();
if(rssLinks != null && rssLinks.size() > 0)
{
for(RssLink rss : rssLinks) {
QueueChannel channel = (QueueChannel) context.getBean("feedChannel");
SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter();
adapter.setApplicationContext(context);
adapter.setBeanName("adapter." + rss.getSource().getName());
FeedEntryMessageSource source = new FeedEntryMessageSource(new URL(rss.getLink()), rss.getSource().getName());
source.setApplicationContext(context);
source.setBeanName(rss.getSource().getDomain());
source.setBeanFactory(beanFactory);
source.afterPropertiesSet();
adapter.setSource(source);
adapter.setOutputChannel(channel);
PeriodicTrigger trigger = new PeriodicTrigger(300000);
adapter.setTrigger(trigger);
adapter.setMaxMessagesPerPoll(100);
adapter.setBeanFactory(beanFactory);
adapter.afterPropertiesSet();
adapter.start();
}
}
}
그리고 이것은 채널의 항목을 읽는 독자입니다.
@ServiceActivator(inputChannel = "feedChannel")
public void feedChannel(Message<SyndEntry> message) {
SyndEntry payload = message.getPayload();
MessageHeaders header = message.getHeaders();
Feed feed = new Feed();
feed.setLink(payload.getLink());
feed.setTitle(payload.getTitle());
//feed.setSource(I don't know which rss link send me this item);
}
그래서 나는 항목이있는 RSS 링크를 속하는 알기 위해 ServiceActivator에서 페이로드의 FeedEntryMessageSource 가서합니다. 나는이 라인에 '. rss.getSource() getName()'을 설정합니다
FeedEntryMessageSource source = new FeedEntryMessageSource(new URL(rss.getLink()), rss.getSource().getName());
답변 주셔서 감사 합니다만 payload.getSource()는 모든 피드에 대해 null입니다. 나는 sth을 놓친다? – Richard