【问题标题】:Why does STOMP functionality in spring-websocket depend on Spring MVC?为什么 spring-websocket 中的 STOMP 功能依赖于 Spring MVC?
【发布时间】:2019-08-28 06:22:05
【问题描述】:

目前,我正在尝试将 STOMP 与使用 webflux 的 websocket 一起使用。为了向STOMP主题发送消息,我需要使用SimpMessagingTemplate,这是我添加@EnableWebSocketMessageBroker时由spring boot自动配置贡献的

但问题是,@EnableWebSocketMessageBroker 间接希望我在类路径中有 spring-mvc

@EnableWebSocketMessageBroker @Imports DelegatingWebSocketMessageBrokerConfiguration 扩展 WebSocketMessageBrokerConfigurationSupport & WebSocketMessageBrokerConfigurationSupport#stompWebSocketHandlerMapping 方法期望返回类 HandlerMapping

我的问题是

  1. 如何在没有 webmvc 的情况下将 STOMP 与 webflux 集成
  2. 为什么自动配置会强制我们在类路径中使用 mvc(并可能与 webflux 冲突)

【问题讨论】:

    标签: spring-webflux spring-websocket stomp spring-messaging


    【解决方案1】:

    如果您在 Google 上搜索“stomp webflux”,(对我而言)第一个点击是an issue in the Spring Boot issue tracker,它简要说明了为什么不支持它:

    总体意图是提供与 WebFlux 一致的更高级别的消息传递支持,但目前还没有具体的目标版本。请注意,我们正在研究 gRPC 和 RSocket 支持,属于同一大类。

    对 RSocket 的支持已在 5.2 行中开始,因此您可能想看看。

    【讨论】:

    • 感谢您的回答。我已经浏览了你分享的链接。由于这个问题已有一年多的历史,我想交叉检查。此外,由于选择 RSocket 不是一个小决定,我想看看我们是否有理由让 webmvc 支持 STOMP,尽管WebSocketHandler 返回Mono<Void>。另外,由于来自 webmvc 的HandlerMapping 仅存在于整个@EnableWebSocketMessageBroker 中的一个位置,我是否可以将servlet HandlerMapping 替换为webflux HandlerMapping 并且仍然可以使用STOMP?
    • STOMP 目前不支持 WebFlux。
    • 感谢您的澄清。我会尝试用 webflux HandlerMapping 替换 servlet HandlerMapping 是否有效
    • 这样做会在同一个应用程序中混合阻塞 I/O 和非阻塞 I/O。一个依赖 Servlet,另一个不依赖。这不受 Spring 团队的支持,并且可能会导致运行时问题,它完全可以工作
    • 嗨,我说的完全一样。我的问题是,由于当前版本对来自 webmvc 的 HandlerMapping 有很强的依赖性,而不是同时具有阻塞和非阻塞变体,我是否可以将来自 webmvc 的 HandlerMapping 替换为来自 webflux 的org.springframework.web.reactive.HandlerMapping 以便我只有一个版本(只是 webflux 变体) 知道如何处理 URL
    猜你喜欢
    • 2020-05-29
    • 2018-07-27
    • 2016-05-06
    • 2020-06-17
    • 2016-06-28
    • 2017-08-06
    • 2017-10-04
    • 2018-11-22
    • 2022-12-15
    相关资源
    最近更新 更多