标签:spring-webflux server-sent-events angular mongodb spring
我正在使用Spring Web Flux Reactive,MongoDB和Angular构建实时事件流应用程序(例如股票价格).我想建立以下管道:MongoDB->反应性MongoDB驱动程序-> Spring Web Reactive MongoDB存储库-> Spring Web反应控制器->角度(通过服务器发送事件).
这是我的Spring Web反应控制器:
@GetMapping(value = "/test", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<LiveRate> test() {
Flux<LiveRate> res = liveRateRepository.findByLastUpdate(1504580678).log(); // I query hard-coded value and MongoDB returns 4 events
return res;
}
这是我的Angular代码:
var source = new EventSource('http://localhost:8080/test');
source.addEventListener('message', function(e) {
console.log(e.data);
}, false);
由于某些原因,Angular会无限次返回4个事件,因此Spring也会继续查询MongoDB.我的理解是,使用服务器发送事件方法,Spring应该返回它拥有的所有事件并继续等待新的事件,但是看起来Angular一直在请求越来越多的事件.
如果我在浏览器中命中了http://localhost:8080/test,则它仅返回4个预期的事件.
您能解释一下我所缺少的吗?谢谢.
解决方法:
我最好的猜测是:
>浏览器连接到SSE流,这触发存储库查询
>一旦检索到所有4个条目,存储库就会完成Flux
>这样就完成了SSE流
>浏览器自动重新连接到SSE源
>返回步骤1
您应该在浏览器devtools(网络选项卡)中看到浏览器重新连接.
如果要查找无限流,则应使用the Tailable Cursors feature in Spring Data MongoDB.在这种情况下,只需使用@Tailable注释存储库方法即可.
标签:spring-webflux,server-sent-events,angular,mongodb,spring 来源: https://codeday.me/bug/20191025/1930765.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。