Rsocketサーバーの例外:先なしのハンドラ「」(宛先はクライアントからサーバに渡しません)

Roieベック:

私は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);
}

コントローラ:

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

サーバ側(使用スプリング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、私はアプリケーション/ JSONに設定し、それが仕事に思われません

スタックトレース:

org.springframework.messaging.MessageDeliveryException:org.springframework.messaging.handler.invocation.reactiveでorg.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler.handleNoMatch(RSocketMessageHandler.java:312)で目的地なしのハンドラ ''。 org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.lambda $でorg.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:417)でAbstractMethodMessageHandler.getHandlerMethod(AbstractMethodMessageHandler.java:445) reactor.core.publisherでhandleAndReply $ reactor.core.publisher.Mono.subscribe(Mono.java:3920)でreactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)で4(MessagingRSocket.java:173を)。 FluxConcatArray $ ConcatArraySubscriber.onComplete(FluxConcatArray.java:207)io.rsocket.RSocketResponder.handleRequestResponse(RSocketResponder.java:386でreactor.core.publisher.MonoFromFluxOperator.subscribe(MonoFromFluxOperator.java:74)でreactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80)で)reactor.core.publisher.MonoFlatMapMany $ FlatMapManyInner.onNextでreactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)でio.rsocket.RSocketResponder.handleFrame(RSocketResponder.java:298)(MonoFlatMapMany.javaで: reactor.core.publisher.FluxGroupBy $ UnicastGroupedFluxでreactor.core.publisher.FluxGroupBy $ UnicastGroupedFlux.drainでreactor.core.publisher.FluxGroupBy $ UnicastGroupedFlux.drainRegular(FluxGroupBy.java:554)(FluxGroupBy.java:630)にて238) reactor.core.publisherで.subscribe reactor.core.publisher.Flux.subscribe(Flux.java:8000)で(FluxGroupBy.java:696)。IOでreactor.core.publisher.MonoProcessor.onNext(MonoProcessor.java:316)でreactor.core.publisher.Operators $ MonoSubscriber.complete(Operators.java:1582)でMonoFlatMapMany $ FlatMapManyMain.onNext(MonoFlatMapMany.java:184) .rsocket.internal.ClientServerInputMultiplexer.lambda $はreactor.core.publisher.FluxGroupBy $ GroupByMain.drainLoop(FluxGroupByでreactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)で$ -1(ClientServerInputMultiplexer.java:116)を新しいです。 Javaの:380)reactor.core.publisher.FluxMapでreactor.core.publisher.FluxGroupBy $ GroupByMain.onNextでreactor.core.publisher.FluxGroupBy $ GroupByMain.drain(FluxGroupBy.java:316)(FluxGroupBy.java:201)でreactor.netty.channel.FluxReceive.drainReceiverでreactor.core.publisher.FluxMap $ MapSubscriber.onNext(FluxMap.java:114)(FluxReceive.javaで$ MapSubscriber.onNext(FluxMap.java:114):206)reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.javaでreactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:342)でreactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:322)で:io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContextでio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)でio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)における91)。 Javaの:352)io.netty.channel.AbstractChannelHandlerContextでio.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302)でio.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:328)で。io.netty.channel.DefaultChannelPipelineでio.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)でio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)でinvokeChannelRead(AbstractChannelHandlerContext.java:374) io.nettyでio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)でio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)で$ HeadContext.channelRead(DefaultChannelPipeline.java:1421)。 io.netty.channel.nio.NioEventLoop.processSelectedKeyでio.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read(AbstractNioByteChannel.java:163)(NioEventLoop.javaでchannel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930):697)io.netty.channel.nio.NioEventLoopでio.netty.channel.nio.NioEventLoop.processSelectedKeysでio.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)(NioEventLoop.java:549)でio.netty.util.internal.ThreadExecutorMapでio.netty.util.concurrent.SingleThreadEventExecutorで.RUN(NioEventLoop.java:511)$ 5.run(SingleThreadEventExecutor.java:918)$ 2.run(ThreadExecutorMap.java:74)でjava.base / java.lang.Thread.runでio.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)(Thread.java:834)ジャワで実行io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)でio.netty.util.internal.ThreadExecutorMapで(SingleThreadEventExecutor.java:918)$ 2.run(ThreadExecutorMap.java:74)。ベース/ java.lang.Thread.run(Thread.java:834)ジャワで実行io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)でio.netty.util.internal.ThreadExecutorMapで(SingleThreadEventExecutor.java:918)$ 2.run(ThreadExecutorMap.java:74)。ベース/ java.lang.Thread.run(Thread.java:834)

ソン・ヒョンハン:

あなたはどちら春バージョンを使用していますか?私は同じ問題を持っていたと私は春ブート・スターター・親2.2.0.M3を変えることによってそれを解決しました。

ここに私の源であるhttps://github.com/han1448/spring-rsocket-exampleは、


追加しました。

私はこの問題を解決しました。あなたはにMIMEタイプを変更する必要がありますmessage/x.rsocket.routing.v0あなたがこのMIMEタイプを取得することができます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);
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229460&siteId=1
おすすめ