5

有人可以告诉我或给出一个使用WebFlux、RScoket 和 Spring(或 SpringBoot)的现成 CRUD 示例吗?

我研究了RSocket文档WebFlux,也写了我的简单示例,但我希望看到一个真正的CRUD应用程序使用RSocket的基本方法。

我将不胜感激。谢谢。

4

1 回答 1

5

我维护了一个 Spring/RSocket 示例项目,其中包含 4 种基本的 RSocket 交互模式

如果您只需要简单 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 应用,可以RSocketRequester像这样使用 RSocket 与服务端交互。

//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 上发表了一篇文章

于 2020-03-01T15:25:09.577 回答