Spring 集成提供了非响应式(Reactive)入站/出站 WebSocket 适配器,简单地说,它通过内部容器将 session 与 id 关联起来,您对消息进行一些处理,在出站时,它检查消息头中的 session id,并通过那次 session 。
现在,随着 Spring 通过 org.springframework.web.reactive.socket.WebSocketSession 和其他类提供响应式(Reactive) WebSocket 支持,我想知道在响应式(Reactive) WebSocket 堆栈的 channel 适配器方面是否也有类似的支持。
如果没有,是否有任何常见的模式/实践,如何将响应式 WS 与 spring 集成消息流集成?
最佳答案
此功能尚未被调用,因此我们还没有考虑此事。
请查看我的 SandBox 。这是针对当前情况我能提出的最好建议。
我们只是遵循标准 Spring WebFlux 建议来实现 WebSockets 解决方案。因此,我们有一个具有适当 URL 映射的 WebSocketHandler
实现。该实现只是将 Flux
从 session.receive()
转发到动态注册的 IntegrationFlow
中。然后,该流程转换为用于 session.send()
的响应式 Publisher
。
我相信还可以使用许多其他方法,例如使用来自此 handle(WebSocketSession)
impl 的 FluxMessageChannel
bean 及其 subscribeTo()
将 Flux
桥接到预定义中整合流程。或者从 doOnNext()
进行简单的 @MessagingGateway
调用。
不过,不确定 session.send()
是否可以在下游独立使用(需要播放),但您可以在示例中看到我如何传播 WebSocketSession
> 进入 MessageHeaders
以使其能够在集成流程中进行访问。
关于java - Spring 集成和响应式(Reactive) WebSockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291206/