【问题标题】:How to get source of rss feedChannel SyndEntry message in Spring Integration?如何在 Spring Integration 中获取 rss feedChannel SyndEntry 消息的来源?
【发布时间】:2016-10-24 01:57:34
【问题描述】:

我有一个使用 Spring 集成的 RSS 提要阅读器。我想了解一个 rss 项目的来源。

示例项目:

  • title:“高级将领:利比亚需要更多地面部队”
  • 链接:“cnn.com/blabla”
  • 发布日期:“2016-06-22 10:10:10”

我想知道这个项目是通过哪个 rss 链接发送给我的,因为我在 init() 函数中设置了它。

结果:http://rss.cnn.com/rss/edition.rss

这是我的订阅频道配置。

@Bean
public MessageChannel feedChannel() {
return new QueueChannel(500);
}

这是动态 feedChannel 创建器。我从数据库中读取 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);
}

所以我想在 ServiceActivator 中获取有效负载的 FeedEntryMessageSource,以便知道该项目属于哪个 rss 链接。我在这一行中将其设置为“rss.getSource().getName()”:

FeedEntryMessageSource source = new FeedEntryMessageSource(new URL(rss.getLink()), rss.getSource().getName());

【问题讨论】:

    标签: java rss spring-integration feed channel


    【解决方案1】:

    我发现您在 rss.getLink()rss.getSource().getName() 之间有直接链接。那么,如何在您的@ServiceActivator 中像payload.getSource().getUri() 一样使用并从您的rssLinkService 中检索所需的name

    【讨论】:

    • 感谢您的回答,但所有提要的 payload.getSource() 均为空。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2019-01-26
    • 2020-11-17
    • 2014-07-03
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多