使用Spring引导运行Spring Integration RSocket示例时出错

使用Spring引导运行Spring Integration RSocket示例时出错,spring,spring-boot,spring-integration,rsocket,Spring,Spring Boot,Spring Integration,Rsocket,我试图创建一个简单的Spring Boot应用程序来测试Rsocket的Spring集成 我将test文件夹中的示例代码从spring integrarion rsocket复制到我的spring引导应用程序中 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot

我试图创建一个简单的Spring Boot应用程序来测试Rsocket的Spring集成

我将test文件夹中的示例代码从
spring integrarion rsocket
复制到我的spring引导应用程序中

pom.xml

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-rsocket</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-integration</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-rsocket</artifactId>
        </dependency>

主应用程序类

@springboot应用程序
公共类演示应用程序{
公共静态void main(字符串[]args){
run(DemoApplication.class,args);
}
}
@配置
类DemoIntegrationConfig{
@豆子
公共服务器SocketConnector服务器SocketConnector(){
返回新的ServerSocketConnector(“localhost”,0);
}
@豆子
公用客户端SocketConnector客户端SocketConnector(服务器SocketConnector服务器SocketConnector){
int port=serversocketconnector.getBoundPort().block();
ClientRSocketConnector ClientRSocketConnector=新ClientRSocketConnector(“localhost”,端口);
clientRSocketConnector.setAutoStartup(false);
返回客户端插座连接器;
}
@豆子
公共集成流rsocketUpperCaseRequestFlow(客户端RSocketConnector客户端RSocketConnector){
返回积分流
.from(Function.class)
.handle(RSockets.outboundGateway(“/大写”)
.command((消息)->RSocketOutboundGateway.command.requestStreamOrChannel)
.expectedResponseType(“T(java.lang.String)”)
.clientRSocketConnector(clientRSocketConnector))
.get();
}
@豆子
公共集成流rsocketUpperCaseFlow(){
返回积分流
.from(RSockets.inboundGateway(“/大写”))
.transform((flux)->flux.map(String::toUpperCase))
.get();
}
}
以及测试代码

@SpringBootTest
类DemoApplicationTests{
@自动连线
@限定符(“rsocketUpperCaseRequestFlow.gateway”)
专用函数rsocketUpperCaseFlowFunction;
@试验
void testRsocketUpperCaseFlows(){
通量结果=此.rsocketUpperCaseFlowFunction.apply(通量.just(“a\n”、“b\n”、“c\n”));
步骤验证程序。创建(结果)
.expectNext(“A”、“B”、“C”)
.verifyComplete();
}
}
当我运行测试时,它抛出异常:目标“/uppercase”没有处理程序

2019-10-30 12:59:28.617  INFO 2800 --- [           main] com.example.demo.DemoApplicationTests    : Started DemoApplicationTests in 4.778 seconds (JVM running for 6.408)
org.springframework.messaging.MessageDeliveryException: No handler for destination '/uppercase'
        at org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler.handleNoMatch(RSocketMessageHandler.java:309)
        at org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.getHandlerMethod(AbstractMethodMessageHandler.java:445)
        at org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:417)
        at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.lambda$handleAndReply$4(MessagingRSocket.java:173)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4087)
        at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:207)
        at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at reactor.core.publisher.FluxSwitchOnFirst$AbstractSwitchOnFirstInner.onNext(FluxSwitchOnFirst.java:180)
        at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:123)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.UnicastProcessor.drainRegular(UnicastProcessor.java:240)
        at reactor.core.publisher.UnicastProcessor.drain(UnicastProcessor.java:312)
        at reactor.core.publisher.UnicastProcessor.subscribe(UnicastProcessor.java:427)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at io.rsocket.internal.RateLimitableRequestPublisher.subscribe(RateLimitableRequestPublisher.java:74)
        at io.rsocket.RSocketResponder.handleStream(RSocketResponder.java:446)
        at io.rsocket.RSocketResponder.handleChannel(RSocketResponder.java:502)
        at io.rsocket.RSocketResponder.handleFrame(RSocketResponder.java:315)
        at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:242)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drainRegular(FluxGroupBy.java:554)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drain(FluxGroupBy.java:630)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.subscribe(FluxGroupBy.java:696)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:188)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1592)
        at reactor.core.publisher.MonoProcessor.onNext(MonoProcessor.java:317)
        at io.rsocket.internal.ClientServerInputMultiplexer.lambda$new$1(ClientServerInputMultiplexer.java:116)
        at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.drainLoop(FluxGroupBy.java:380)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.drain(FluxGroupBy.java:316)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.onNext(FluxGroupBy.java:201)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
        at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:206)
        at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:329)
        at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:348)
        at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:91)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:328)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
        at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 6.961 s <<< FAILURE! - in com.example.demo.DemoApplicationTests
[ERROR] testRsocketUpperCaseFlows  Time elapsed: 0.894 s  <<< FAILURE!

并清除application.properties中的配置

示例
RestController


@RestController
类Hello控制器{
@自动连线
@懒惰的
@限定符(“rsocketUpperCaseRequestFlow.gateway”)
专用函数rsocketUpperCaseFlowFunction;
@GetMapping(value=“hello”,products=MediaType.TEXT\u EVENT\u STREAM\u value)
公共流量大写(){
返回rsocketUpperCaseFlowFunction.apply(通量仅为(“a”、“b”、“c”、“d”));
}
}
当我运行应用程序时,出现了如下异常

org.springframework.messaging.MessageDeliveryException:目标'/uppercase'不支持请求通道。支持的交互:[设置、元数据\u推送]
位于org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler.handleNoMatch(RSocketMessageHandler.java:389)
位于org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.getHandlerMethod(AbstractMethodMessageHandler.java:476)
位于org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:444)
位于org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.lambda$handleAndReply$4(MessagingRSocket.java:173)
位于reactor.core.publisher.monoder.subscribe(monoder.java:44)
位于reactor.core.publisher.Mono.subscribe(Mono.java:4105)
位于reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:207)
位于reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80)
位于reactor.core.publisher.Flux.subscribe(Flux.java:8174)
位于reactor.core.publisher.FluxSwitchOnFirst$AbstractSwitchOnFirstInner.onNext(FluxSwitchOnFirst.java:180)
位于reactor.core.publisher.fluxdofinallysubscriber.onNext(FluxDoFinally.java:123)
位于reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
位于reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
位于reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
位于reactor.core.publisher.UnicastProcessor.drainRegular(UnicastProcessor.java:240)
位于reactor.core.publisher.UnicastProcessor.drain(UnicastProcessor.java:312)
位于reactor.core.publisher.UnicastProcessor.subscribe(UnicastProcessor.java:427)
位于reactor.core.publisher.Flux.subscribe(Flux.java:8174)
位于io.rsocket.internal.RateLimitableRequestPublisher.subscribe(RateLimitableRequestPublisher.java:74)
位于io.rsocket.RSocketResponder.handleStream(RSocketResponder.java:446)
位于io.rsocket.RSocketResponder.handleChannel(RSocketResponder.java:502)
位于io.rsocket.RSocketResponder.handleFrame(RSocketResponder.java:315)
位于reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)
位于reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:242)
位于reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drainRegular(FluxGroupBy.java:554)
位于reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drain(FluxGroupBy.java:630)
位于reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.subscribe(FluxGroupBy.java:696)
位于reactor.core.publisher.Flux.subscribe(Flux.java:8174)
位于reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:188)
位于reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
位于reactor.core.publisher.MonoProcessor.onNext(MonoProc
2019-10-30 12:59:28.617  INFO 2800 --- [           main] com.example.demo.DemoApplicationTests    : Started DemoApplicationTests in 4.778 seconds (JVM running for 6.408)
org.springframework.messaging.MessageDeliveryException: No handler for destination '/uppercase'
        at org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler.handleNoMatch(RSocketMessageHandler.java:309)
        at org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.getHandlerMethod(AbstractMethodMessageHandler.java:445)
        at org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:417)
        at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.lambda$handleAndReply$4(MessagingRSocket.java:173)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4087)
        at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:207)
        at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at reactor.core.publisher.FluxSwitchOnFirst$AbstractSwitchOnFirstInner.onNext(FluxSwitchOnFirst.java:180)
        at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:123)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.UnicastProcessor.drainRegular(UnicastProcessor.java:240)
        at reactor.core.publisher.UnicastProcessor.drain(UnicastProcessor.java:312)
        at reactor.core.publisher.UnicastProcessor.subscribe(UnicastProcessor.java:427)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at io.rsocket.internal.RateLimitableRequestPublisher.subscribe(RateLimitableRequestPublisher.java:74)
        at io.rsocket.RSocketResponder.handleStream(RSocketResponder.java:446)
        at io.rsocket.RSocketResponder.handleChannel(RSocketResponder.java:502)
        at io.rsocket.RSocketResponder.handleFrame(RSocketResponder.java:315)
        at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:242)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drainRegular(FluxGroupBy.java:554)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.drain(FluxGroupBy.java:630)
        at reactor.core.publisher.FluxGroupBy$UnicastGroupedFlux.subscribe(FluxGroupBy.java:696)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8134)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:188)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1592)
        at reactor.core.publisher.MonoProcessor.onNext(MonoProcessor.java:317)
        at io.rsocket.internal.ClientServerInputMultiplexer.lambda$new$1(ClientServerInputMultiplexer.java:116)
        at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.drainLoop(FluxGroupBy.java:380)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.drain(FluxGroupBy.java:316)
        at reactor.core.publisher.FluxGroupBy$GroupByMain.onNext(FluxGroupBy.java:201)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
        at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:206)
        at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:329)
        at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:348)
        at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:91)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:328)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
        at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 6.961 s <<< FAILURE! - in com.example.demo.DemoApplicationTests
[ERROR] testRsocketUpperCaseFlows  Time elapsed: 0.894 s  <<< FAILURE!