【问题标题】:How to communicate object changes via Flux to Websockets in Sping MongoDB Reactive如何通过 Flux 将对象更改通信到 Spring MongoDB Reactive 中的 Websockets
【发布时间】:2021-10-13 01:38:05
【问题描述】:

请给一些关于以下内容的提示!

先决条件:

  • 副本集类型的 Mongo 集群
  • @EnableReactiveMongoRepositories 已就位,所有存储库都从 ReactiveMongoRepository 扩展
  • @EnableWebFluxSecurity 就位,还有一个自定义过滤器用于 Firebase 身份验证
  • Websocket 连接是通过 SocketIO 类型的客户端(不是 SockJS 客户端)从 Flutter UI 建立的

我有以下流程(以下我用SomeClass混淆真实的类名):

  • 来自 UI 的 SocketIO 订阅是通过 WebSocketHandler 实现完成的 - 它基本上从 Mongo 查询一个给定唯一 ID 的对象(预计只有一项)。 handler方法的代码很简单:
   @Override
   public Mono<Void> handle(org.springframework.web.reactive.socket.WebSocketSession session) {
       return session.send(getUserId(session).flatMap(id -> service.findByUserId(id))
               .map(item -> wrapResponse(item, session)));
   }

服务类中的代码也很简单:

    public Mono<SomeClass> findByUserId(String userId){
        return repository.findSomeClassByUserId(userId);
    }
  • 还有一个 REST 端点,我使用 PUT 请求调用它来修改 Mongo DB 中的对象。 REST端点的代码也很简单:
@PutMapping("someclass")
    public Mono<SomeClass> saveProfile(@RequestBody SomeClass payload){
        return service.saveSomeClass(payload);
    }

问题是:

  • 有什么方法可以通过已经建立的 WebSocket 会话将 REST 调用中所做的更改传达给给定对象?

考虑和假设:

  • 我正在考虑更改流 - 但它与 SockJS sendToUser 一起工作得更好。说到 SocketIO - 在这种情况下,需要有一个活动会话的注册表,这确实让使用响应式风格的利润变得很糟糕
  • @Tailable,据我了解,有很大的限制——只用于有上限的集合,这使得它无法使用。

各位,我们非常感谢任何建议和意见! 提前非常感谢您!

【问题讨论】:

  • 请不要描述您的代码,而是包含足够的代码以及您想要建立的小示例,询问。投票结束,缺乏调试细节。
  • @Toerktumlare,感谢您的回复!请您对“您想建立什么”更具体一点吗?正如我所说:我想对数据库中的实体进行更改,并希望通过反应器功能将它们传播到 UI 而不使用事件/侦听任何内容等。差不多就是这样
  • @Toerktumlare,是的 - 试图描述我想减轻可能的回复的代码 - 阅读文档。我已经阅读了它们,但关于 websockets(非 SockJS 的)和 Spring Mongo Reactive 的特定用法并没有太多 - 因此,也许有人可能有一些相关的经验。我只是想提供一些背景

标签: flutter websocket spring-webflux spring-websocket spring-data-mongodb-reactive


【解决方案1】:

到目前为止我发现的唯一方法是使用 Spring Data MongoDB 提供的更改流

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2018-07-25
    • 1970-01-01
    • 2019-08-29
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2018-12-17
    相关资源
    最近更新 更多