gpt4 book ai didi

playframework - 游戏之间的冲突!框架 2.5 和 gRPC 0.13

转载 作者:行者123 更新时间:2023-12-04 13:48:07 27 4
gpt4 key购买 nike

Play 2.5.0 使用 Netty 4.0.33,而 gRPC 需要 Netty 4.1.0(用于 http2 支持),导致以下异常:

[error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
java.lang.AbstractMethodError: null
at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73)
at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:84)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:154)
at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:131)
at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:154)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:154)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83)
[error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
java.util.NoSuchElementException: http-handler-body-publisher
at io.netty.channel.DefaultChannelPipeline.getContextOrDie(DefaultChannelPipeline.java:1050)
at io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:379)
at com.typesafe.netty.http.HttpStreamsHandler.handleReadHttpContent(HttpStreamsHandler.java:191)
at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:167)
at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:154)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:154)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83)

删除所有 gRPC 代码后,它又可以工作了。

我现在可以尝试任何快速修复吗?谢谢!

最佳答案

编辑:
Play 2.6.0 was released ,它使用的是 Netty 4.1。
tl;博士
由于 Netty 4 和 Netty 4.1 之间的二进制不兼容,Play 2.5.0 和 gRPC 不兼容。

这就是为什么它不适用于 Play 2.5.0 但适用于 Play 2.4.0:
Play 2.5.0 使用 Netty 版本 4.0.33.Final ,它是这样声明的(通过 netty-reactive-streams version 1.0.2 传递):

<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
<version>4.0.33.Final</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec-http</artifactId>
<version>4.0.33.Final</version>
</dependency>
版本 4.0.33.Final被版本驱逐 4.0.34.Finalasync-http-client 传递添加这些是 Play 2.5.0 使用的 netty 依赖项:
io.netty:netty-buffer:4.0.34.Final
io.netty:netty-codec-http:4.0.34.Final
io.netty:netty-codec:4.0.34.Final
io.netty:netty-common:4.0.34.Final
io.netty:netty-handler:4.0.34.Final
io.netty:netty-transport:4.0.34.Final
另一方面,Play 2.4.6 只需要以下 netty 依赖项:
io.netty:netty:3.8.0.Final
因此,虽然 Play 2.5.0 依赖于许多较小的 netty 包,但 Play 2.4.6 仅依赖于单个 netty 包。那是因为 Netty 4 changed the project structure将项目拆分为多个子项目,以便用户可以仅从 Netty 添加必要的功能。更重要的是,“ Netty 的包名已经从 org.jboss.netty 更改为 io.netty ”。
为什么这些变化在这里都相关?
  • gRPC 和 2.4.6 没有依赖冲突,因为 gRPC 不需要依赖 io.netty:netty ,甚至不是传递性的。因此,没有驱逐。
  • 在类级别没有冲突,因为类具有不同的包名称( org.jboss.nettyio.netty ),然后是不同的完全限定名称。因此,它们被视为不同的类。

  • 与 Play 2.5.0 有冲突,因为 Netty 4 和 Netty 4.1 都有相同的依赖 artifactId (然后 4.1 版本驱逐 4.0.34)并且因为 - 因为我们现在有 这两个版本之间的完全限定类名 - 出现二进制文件不兼容。
    这是一个很长的解释,说现在没有办法让 gRPC 和 Play 2.5.0 与 Netty 一起工作。即使您决定使用 Akka HTTP server backend ,有可能与 Play WS 发生冲突。

    关于playframework - 游戏之间的冲突!框架 2.5 和 gRPC 0.13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35827782/

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