我在理论上知道pub/sub模式,现在我想在实践中实现它。
我有一个web应用程序(订阅者),其中包含一个服务,该服务正在收听一个名为"新闻"的频道。此通道由其他应用程序(发布者)的列表填充。
所以,我想知道,如何通知登录用户实时收到的新闻。(就像twitter的"new twitts"一样)。
我的想法:
在我的消费者服务中,我可以将收到的新闻存储在List中,类似于:
@Consumer("myChannel")
public void recNews(New new) {
allNews.add(new);
}
然后,在我的应用程序中配置一个计时器来读取和重置列表,并将当前状态(lastNews)发送到我的web控制器:
@Timer("1 per minute")
public void lastNews() {
lastNews.add(allNews);
allNews = new ArrayList();
}
我说的对吗?还是有更好的解决方案?
与其构建自定义解决方案,不如看看SignalR (https://github.com/SignalR/SignalR/wiki)。它为您处理了许多管道和基础设施问题,是web应用程序的理想选择。
订阅者在尝试接收消息之前告诉发布者(通道)它想要接收消息。通道不是某种被动的流动,它是一个主动的过程。
使用Apache Camel