【问题标题】:Unable to connect to gRPC server when build as jar构建为 jar 时无法连接到 gRPC 服务器
【发布时间】:2023-02-10 14:44:11
【问题描述】:

我正在尝试 gRPC,但遇到了一些问题。我已经构建了一个 gRPC 服务器和一个客户端。与 gRPC (https://grpc.io/docs/languages/java/basics/) 的 java 示例几乎相同,所以没什么特别的。现在,当我创建服务器的 jar 时,它运行良好,但是当我创建客户端的 jar 时,它会抛出以下异常:

Exception in thread "main" io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165)
at com.example.grpc.server.classifier.classifierGrpc$classifierBlockingStub.classify(classifierGrpc.java:210)
at com.example.grpc.client.Main.sendMessage(Main.java:35)
at com.example.grpc.client.Main.main(Main.java:29)
Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: connect(..) failed: Invalid argument: /172.16.3.14:530
Caused by: java.net.ConnectException: connect(..) failed: Invalid argument
at io.grpc.netty.shaded.io.netty.channel.unix.Errors.newConnectException0(Errors.java:155)
at io.grpc.netty.shaded.io.netty.channel.unix.Errors.handleConnectErrno(Errors.java:128)
at io.grpc.netty.shaded.io.netty.channel.unix.Socket.connect(Socket.java:313)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel.doConnect0(AbstractEpollChannel.java:773)
at io.grpc.netty.shaded.io.netty.channel.epoll.EpollSocketChannel.doConnect0(EpollSocketChannel.java:144)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel.doConnect(AbstractEpollChannel.java:758)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.connect(AbstractEpollChannel.java:600)
at io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline$HeadContext.connect(DefaultChannelPipeline.java:1342)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:548)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:533)
at io.grpc.netty.shaded.io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:54)
at io.grpc.netty.shaded.io.grpc.netty.WriteBufferingAndExceptionHandler.connect(WriteBufferingAndExceptionHandler.java:157)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:548)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext.access$1000(AbstractChannelHandlerContext.java:61)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext$9.run(AbstractChannelHandlerContext.java:538)
at io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
at io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:394)
at io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995)
at io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:829)

当我在 Intellij 中运行客户端时,不会发生这种情况。

搜索了一段时间后,我发现一些帖子建议使用标志 java.net.preferIPv4Stack=true 强制使用 ipv4,但没有用。

一些版本的 protobuf 和 gRPC

    implementation 'com.google.protobuf:protobuf-java:3.21.5'
    implementation 'io.grpc:grpc-netty-shaded:1.49.0'
    implementation 'io.grpc:grpc-protobuf:1.49.0'
    implementation 'io.grpc:grpc-stub:1.49.0'

所以要明确一点,客户端在 Intellij 中运行时有效,但在构建为 jar 时无效。

【问题讨论】:

标签: java sockets grpc java-11


【解决方案1】:
<configuration>
<transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>

https://github.com/grpc/grpc-java/issues/9387 我爱它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2022-01-06
    • 2021-07-16
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2020-01-27
    相关资源
    最近更新 更多