如何在 Spring Integration 中获取 rss feedChannel SyndEntry 消息的来源?
Posted
技术标签:
【中文标题】如何在 Spring Integration 中获取 rss feedChannel SyndEntry 消息的来源?【英文标题】:How to get source of rss feedChannel SyndEntry message in Spring Integration? 【发布时间】: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());
【问题讨论】:
【参考方案1】:我发现您在 rss.getLink()
和 rss.getSource().getName()
之间有直接链接。那么,如何在您的@ServiceActivator
中像payload.getSource().getUri()
一样使用并从您的rssLinkService
中检索所需的name
。
【讨论】:
感谢您的回答,但所有提要的 payload.getSource() 均为空。我错过了什么吗?以上是关于如何在 Spring Integration 中获取 rss feedChannel SyndEntry 消息的来源?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Integration DSL 中为通道设置多个消息处理程序?
Spring Integration:如何增加对传入消息的处理
如何使用 Spring Integration 发送 gcm xmpp 消息?
Spring Integration:如何一次处理多条消息?