我为RSocket消息编写了一个小样

问题是我无法访问Rsocket端点,
我从服务器收到以下异常:

客户端:
配置:

@Bean
RSocket rSocket() {
    return RSocketFactory.connect()
            .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE)
            .frameDecoder(PayloadDecoder.ZERO_COPY)
            .transport(TcpClientTransport.create(new InetSocketAddress(7500)))
            .start()
            .block();
}

@Bean
RSocketRequester requester(RSocketStrategies strategies) {
    return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_JSON, strategies);
}

Controller :

private final RSocketRequester requester;

@GetMapping("/greet/{name}")
public Publisher<GreetingsResponse> greet(@PathVariable String name) {
    return requester
            .route("hello")
            .data(new GreetingsRequest(name))
            .retrieveMono(GreetingsResponse.class);
}

服务器端(使用spring Rsocket):
yml:
spring:
  rsocket:
    server:
      port: 7500
      transport: tcp
  main:
    lazy-initialization: true

配置:

@MessageMapping("hello")
Mono<GreetingsResponse> greet(GreetingsRequest request) {
    return Mono.just(new GreetingsResponse("Hello " + request.getName() + " @ " + Instant.now()));
}

我很确定这与新的wrap函数RSocketRequester.wrap有关
因为它接受新参数metadataMimeType,所以将其设置为application/Json,
但它似乎不起作用

堆栈跟踪:

最佳答案

您正在使用哪个 Spring 版本?
我有一个相同的问题,我通过更改spring-boot-starter-parent 2.2.0.M3来解决了。

这是我的资料
https://github.com/han1448/spring-rsocket-example

添加。

我解决了这个问题。您需要将mimeType更改为message/x.rsocket.routing.v0
您可以从MetadataExtractor.ROUTING获得此mimeType。

@Bean
RSocket rSocket() {
    return RSocketFactory.connect()
            .mimeType(MetadataExtractor.ROUTING.toString(), MimeTypeUtils.APPLICATION_JSON_VALUE)
            .frameDecoder(PayloadDecoder.ZERO_COPY)
            .transport(TcpClientTransport.create(new InetSocketAddress(7500)))
            .start()
            .block();
}

@Bean
RSocketRequester requester(RSocketStrategies strategies) {
    return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MetadataExtractor.ROUTING, strategies);
}

09-26 07:09