WebFlux + RSocket + Spring

5

请问是否有现成的使用 WebFlux、RSocket 和 Spring(或SpringBoot) 的 CRUD 示例?

我已经阅读了 RSocket 文档,学习了 WebFlux ,也写了自己的简单示例,但我想看到一个真正使用基本方法的 RSocket 的CRUD应用程序。

非常感谢!

1个回答

6
我维护了一个 Spring/RSocket 示例项目,包含 RSocket 的 4 种基本交互模式
如果您只需要简单的 CRUD 操作的请求和响应,可以选择 请求和响应 模式,并选择传输协议,TCP 或 WebSocket。
要实现 CRUD 操作,只需为它们定义 4 个不同的路由,就像使用 URI 定义 RESTful API 一样,您必须有一个良好的命名计划,但在 RSocket 中,没有 HTTP 方法来帮助您区分相同的路由。
例如,在服务器端,我们可以声明一个 @Controller 来处理这样的消息。
@Controller
class ProfileController {

    @MessageMapping("fetch.profile.{name}")
    public Mono<Profile> greet(@DestinationVariable String name) {
    }

    @MessageMapping("create.profile")
    public Mono<Message> greet(@Payload CreateProfileRequest p) {
    }

    @MessageMapping("update.profile.{name}")
    public Mono<Message> greet(@DestinationVariable String name, @Payload UpdateProfileRequest p) {
    }

    @MessageMapping("delete.profile.{name}")
    public Mono<Message> greet(@DestinationVariable String name) {
    }
}


在客户端,如果是Spring Boot应用程序,则可以使用RSocket RSocketRequester与服务器端进行交互,如下所示。
//fetch a profile by name
requester.route("fetch.profile.hantsy").retrieveMono()

//create a new profile
requester.data(new CreateProfileRequest(...)).route("create.profile").retrieveMono()

//update the existing profile
requester.data(new UpdateProfileRequest(...)).route("update.profile.hantsy").retrieveMono()

//delete a profile
requester.route("delete.profile.hantsy").retrieveMono()


当然,如果你只是构建一个使用rsocket协议暴露服务的项目,客户端可以是rsocket-js项目或其他语言和框架,如Angular、React或Android等。
更新:我在我的rsocket示例代码中添加了一个crud示例,并且我已经发布了一篇Medium文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接