如何用Project Reactor的Sinks.many()适配不同消费速度的客户端
Project Reactor 广播场景实现困惑与需求
我在实际项目中使用Project Reactor时遇到了问题,需要将事件分发给所有已连接的客户端(浏览器,基于HTTP和Server-Sent Events)。目前我通过单元测试(控制台订阅者)进行测试,同时也完成了基于HTTP推送的SSE示例代码。
核心目标
- 实现事件广播,支持不同浏览器以不同速度接收事件
- 当客户端无法跟上事件处理速度时,主动断开其连接,使其需重新连接后才能继续接收流
额外需求
实现智能批处理:当服务器端某客户端的缓冲区累积到X个事件时,调用自定义代码合并事件(例如同key的数据库更新可合并为仅保留最新值的单次更新)
已尝试的Sink实现
Sinks.many().replay().limit(0); // latest();Sinks.many().multicast().directAllOrNothing();Sinks.many().multicast().directBestEffort();Sinks.many().multicast().onBackpressureBuffer(8);
内容的提问来源于stack exchange,提问作者Lubo
相关产品推荐
相关产品推荐

