gpt4 book ai didi

java - 带有 Spring Integration 的 TCP 服务器失败

转载 作者:可可西里 更新时间:2023-11-01 02:50:21 28 4
gpt4 key购买 nike

使用 spring boot 2 和 spring 集成为面向流的监听套接字/服务器开发非阻塞 TCP,代码如下。

@Bean
public TcpNetServerConnectionFactory cf() {
TcpNetServerConnectionFactory cf = new TcpNetServerConnectionFactory(8595);
cf.setSerializer(new ByteArrayCrLfSerializer());
cf.setDeserializer(new ByteArrayCrLfSerializer());
return cf;
}

@Bean
public TcpReceivingChannelAdapter inbound(AbstractServerConnectionFactory cf) {
TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
adapter.setConnectionFactory(cf);
adapter.setOutputChannel(tcpIn());
return adapter;
}

@Bean
public MessageChannel tcpIn() {
return new DirectChannel();
}

@Transformer(inputChannel = "tcpIn", outputChannel = "serviceChannel")
@Bean
public ObjectToStringTransformer transformer() {
return new ObjectToStringTransformer();
}

@ServiceActivator(inputChannel = "serviceChannel")
public void service(String jsonInString) {
System.out.println(jsonInString);
}

应用程序开始指示 tcp 端口正在按预期监听,但几分钟后抛出以下异常:

2018-03-09 13:21:51.168  WARN 1202 --- [-worker-ELG-3-2] i.n.c.AbstractChannelHandlerContext      : Failed to mark a promise as failure because it has succeeded already: DefaultChannelPromise@331a9712(success)

java.lang.NoSuchMethodError: io.netty.handler.codec.http2.Http2ConnectionEncoder.writePing(Lio/netty/channel/ChannelHandlerContext;ZLio/netty/buffer/ByteBuf;Lio/netty/channel/ChannelPromise;)Lio/netty/channel/ChannelFuture;
at io.grpc.netty.NettyClientHandler.sendPingFrame(NettyClientHandler.java:568) ~[grpc-netty-1.9.0.jar!/:1.9.0]
at io.grpc.netty.NettyClientHandler.write(NettyClientHandler.java:287) ~[grpc-netty-1.9.0.jar!/:1.9.0]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1041) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.AbstractChannel.write(AbstractChannel.java:295) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.grpc.netty.WriteQueue$AbstractQueuedCommand.run(WriteQueue.java:186) [grpc-netty-1.9.0.jar!/:1.9.0]
at io.grpc.netty.WriteQueue.flush(WriteQueue.java:124) [grpc-netty-1.9.0.jar!/:1.9.0]
at io.grpc.netty.WriteQueue.access$000(WriteQueue.java:32) [grpc-netty-1.9.0.jar!/:1.9.0]
at io.grpc.netty.WriteQueue$1.run(WriteQueue.java:44) [grpc-netty-1.9.0.jar!/:1.9.0]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [netty-common-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [netty-common-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) [netty-transport-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) [netty-common-4.1.22.Final.jar!/:4.1.22.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.22.Final.jar!/:4.1.22.Final]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]

最佳答案

查看 writePing 方法 [1] 的 API 后,您似乎缺少第二个参数,因为它需要四个参数,如下所示:

(ChannelHandlerContext ctx,
boolean ack,
long data,
ChannelPromise promise)

从你的堆栈跟踪中,我可以看到你只传递了 3 个参数:

java.lang.NoSuchMethodError: io.netty.handler.codec.http2.Http2ConnectionEncoder.writePing(Lio/netty/channel/ChannelHandlerContext;ZLio/netty/buffer/ByteBuf;Lio/netty/channel/ChannelPromise;)

您可以尝试添加第二个参数 boolean ack 吗?

[1] https://netty.io/4.1/api/io/netty/handler/codec/http2/Http2FrameWriter.html#writePing-io.netty.channel.ChannelHandlerContext-boolean-long-io.netty.channel.ChannelPromise-

关于java - 带有 Spring Integration 的 TCP 服务器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com