我为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);
}