参考:
rsocket 官方文档
rsocket-java demo示例 - request/response模式下的路由请求
SpringBoot整合RSocket实时数据通信
spring官方文档介绍rsocket
集成spring-rsocket
spring官方集成rsocket高级配置
一、背景
大型分布式系统通常由不同的团队使用各种技术和编程语言以模块化方式实现。这些部件需要可靠地通信,并支持快速、独立的演进。在分布式系统中,模块之间有效且可扩展的通信是一个至关重要的问题。它显著影响用户体验的延迟程度以及构建和运行系统所需的资源量。
二、交互模型
Fire-and-Forget
即发即弃是一种请求/响应的优化,在不需要响应时非常有用。它可以实现显着的性能优化,不仅可以通过跳过响应来节省网络使用量,还可以节省客户端和服务器的处理时间,因为不需要记录来等待和关联响应或取消请求。
此交互模型对于支持有损的用例非常有用,例如非关键事件日志记录。
Future<Void> completionSignalOfSend = socketClient.fireAndForget(message);
Request/Response (single-response)
仍然支持标准请求/响应语义,并且仍然期望代表 RSocket 连接上的大多数请求。这些请求/响应交互可以被视为优化的“只有 1 个响应的流”,并且是通过单个连接复用的异步消息。
消费者“等待”响应消息,因此它看起来像典型的请求/响应,但其底层从不同步阻塞。
Future<Payload> response = socketClient.requestResponse(requestPayload);
Request/Stream (multi-response, finite)
从Request/Response扩展而来的是Request/Stream,它允许将多个消息流式传输回来。将此视为“集合”或“列表”响应,但不是将所有数据作为单个响应返回,而是每个元素按顺序流式传输回来。
使用情景可能包括:
- 获取视频列表
- 获取目录中的产品
- 逐行检索文件