6

RSocket には 4 つの対話モデルが用意されています。

  • 火をつけて忘れる
  • リクエストとレスポンス
  • リクエストストリーム
  • リクエストチャンネル
  • (メタデータのプッシュ)

Spring (および Spring Boot) は RSocket 統合を提供します。元の RSocket API を隠すために、既存のメッセージング インフラストラクチャを使用して RSocket サーバーを簡単に構築できます。

   @MessageMapping("hello")
    public Mono<Void> hello(Greeting p) {
        log.info("received: {} at {}", p, Instant.now());
        return Mono.empty();
    }

    @MessageMapping("greet.{name}")
    public Mono<String> greet(@DestinationVariable String name, @Payload Greeting p) {
        log.info("received: {}, {} at {}", name, p, Instant.now());
        return Mono.just("Hello " + name + ", " + p.getMessage() + " at " + Instant.now());
    }

    @MessageMapping("greet-stream")
    public Flux<String> greetStream(@Payload Greeting p) {
        log.info("received:  {} at {}", p, Instant.now());
        return Flux.interval(Duration.ofSeconds(1))
                .map(i -> "Hello #" + i + "," + p.getMessage() + " at " + Instant.now());
    }

また、クライアント側にはRescoketRequester、サーバーと握手をするための が用意されています。

    @GetMapping("hello")
    Mono<Void> hello() {
        return this.requester.route("hello").data(new Greeting("Welcome to Rsocket")).send();
    }

    @GetMapping("name/{name}")
    Mono<String> greet(@PathVariable String name) {
        return this.requester.route("greet." + name).data(new Greeting("Welcome to Rsocket")).retrieveMono(String.class);
    }

    @GetMapping(value = "stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    Flux<String> greetStream() {
        return this.requester.route("greet-stream").data(new Greeting("Welcome to Rsocket"))
                .retrieveFlux(String.class)
                .doOnNext(msg -> log.info("received messages::" + msg));
    }

でも使い方はrequestChannel Spring 方式のmetadataPushモデル (メッセージング インフラストラクチャを使用)?

サンプルコードはGithubにあります。更新: requestChannelサンプルを追加しました。

更新: SETUPMETADATA_PUSHは で処理できます@ConnectMapping。また、Spring Security RSocket はSETUPREQUESTを保護できます。

4

1 に答える 1