本文介绍了Rsocket服务器异常:没有针对目标''的处理程序(目标未从客户端传递到服务器)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为RSocket消息编写了一个演示

I wrote a little demo for RSocket message

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

The problem is that I am unable to access the Rsocket endpoint,I get the following exception from the server:

客户端:配置:

@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);
}

控制器:

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:

The server side(using 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,但这似乎不起作用

I am pretty sure it has something to do with the new wrap function, RSocketRequester.wrap as it accepts a new parameter metadataMimeType, I set it to application/Json,but it does not seems to work

stackTrace:

推荐答案

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

Which spring version are you using?I had a same issue and I solved it by changing spring-boot-starter-parent 2.2.0.M3.

这是我的出处 https://github.com/han1448/spring-rsocket-example

已添加.

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

I solved this issue. You need to change mimeType to message/x.rsocket.routing.v0.You can get this mimeType from MetadataExtractor.ROUTING.

@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);
}

这篇关于Rsocket服务器异常:没有针对目标''的处理程序(目标未从客户端传递到服务器)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 18:02