WebFlux + RSocket + Spring - PullRequest
       100

WebFlux + RSocket + Spring

1 голос
/ 25 февраля 2020

Может кто-нибудь сказать мне или дать готовый пример CRUD, используя WebFlux, RScoket и Spring (или SpringBoot) ?

Я изучил документацию RSocket , WebFlux также написал мои простые примеры, но я хотел бы увидеть настоящее CRUD приложение, использующее базовые c методы с использованием RSocket .

Я буду очень благодарна. Спасибо.

1 Ответ

2 голосов
/ 01 марта 2020

Я сохранил пример проекта Spring / RSocket с 4 основными c режимами взаимодействия RSocket .

Если вам требуется только запрос / ответ для простых операций CRUD, проверьте режим запрос и ответ и выберите транспортный протокол, TCP или WebSocket.

Для реализации Операции CRUD, просто определите для них 4 различных маршрута, например, определите API RESTful, используя URI, у вас должен быть хороший план для именования, но в 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 или * 1031. * et c.

Обновление: я добавил образец в мои примеры кодов rsocket и опубликовал пост на Medium .

...