Spring integration 像spring websocket那样构建spring集成渠道';不支持非stomp客户端的消息传递

Spring integration 像spring websocket那样构建spring集成渠道';不支持非stomp客户端的消息传递,spring-integration,spring-websocket,spring-messaging,Spring Integration,Spring Websocket,Spring Messaging,由于我们的websocket服务器不使用stomp,spring不提供MessageBroker框架。我的设想是将spring消息发布/订阅与Redis message store for dev结合使用,并将message broker从Redis迁移到SQS+Dynamo for prod版本 由于我排除了stomp(因为ios和Android由于缺乏支持而不准备将stomp客户端放在前台),SpringWebSocket库也没有启用发布/订阅功能 我们的商业案例示例: 每个连接的webso

由于我们的websocket服务器不使用stomp,spring不提供MessageBroker框架。我的设想是将spring消息发布/订阅与Redis message store for dev结合使用,并将message broker从Redis迁移到SQS+Dynamo for prod版本

由于我排除了stomp(因为ios和Android由于缺乏支持而不准备将stomp客户端放在前台),SpringWebSocket库也没有启用发布/订阅功能

我们的商业案例示例:

每个连接的websocket会话都会向另一个微服务(Java websocket客户端)发出获取数据的请求。我的愿景是通过pub/sub架构将这两项服务与redis连接起来

  • 移动客户端通过websocket发送->“嗨,我的账单付了吗?”
  • Websocket服务器接收此消息并将其传递给Websocket 通过redis发布/订阅的客户端服务
  • 由于websocket服务器和websocket客户端通过Redi连接 发布/订阅。他们可以交换消息
  • Websocket客户端将通过套接字连接到人工代理系统 然后通过“嗨,我的账单付了吗?”
  • 回复(“是的,已经支付了。”)将再次发布到 websocket服务器
  • Websocket服务器将把它发送回特定的用户目的地
  • 由于业务原因,我们希望为这个用例保留2个服务。Websocket客户端可以连接到客户代理系统,并将其与我们的业务逻辑解耦。 我们的移动应用程序将与我们自己的websocket服务器通信。这使我们能够灵活地添加更多定制,并且独立于特定供应商

    这是我的解决办法

  • 使用SpringWebSocket而不使用stomp创建websocket服务器
  • 使用spring集成创建消息传递体系结构
  • 每个websocket会话都绑定到一个spring集成通道,并且 将响应发送到用户特定的目标
  • 为每个连接创建一个Redis请求/响应队列
  • Spring集成频道订阅redis队列
  • 由于我们的基础设施不提供Rabbit MQ支持,Redis队列将在prod中被SQS取代

    问题: 我们可以在运行时创建spring集成通道并绑定到特定的服务或队列吗?思考的过程就是提供一个 每个websocket会话的频道,并在会话结束时删除频道

    在spring集成中是否有更好的替代解决方案 执行此用例的spring消息传递

    您可以按需注册和销毁子流

    保留对动态注册的流id的引用,并在上下文上调用
    remove()


    Spring集成有基于Spring框架的内置。

    谢谢。我正在研究你的建议。我从你那里得到了推荐信。webSocketOutboundAdapter未将数据返回到客户端。我使用了ChromeWebSocket客户端。集成流正在工作,消息已正确路由,但不会返回到浏览器客户端。我应该使用TCPOutbound适配器将消息路由到客户端浏览器或服务吗?不要在评论中提出新问题;相反,提出一个新问题,显示您的代码和配置。