本文介绍了在OSGi包中使用时,GRPC Java找不到NameResolver的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在OSGi包中使用Java GRPC。我使用的是maven和org.apache.servicymx.bundles.grpc-1.30.2_1,它是从1.30.2_1的发布标记本地构建的。

OSGi包启动时没有任何问题,但在运行时创建了一个ManageChannel时,我得到了一个java.lang.IllegalArgumentException: cannot find a NameResolver for localhost:4435异常。

堆栈跟踪的相关部分

java.lang.IllegalArgumentException: cannot find a NameResolver for localhost:4435
    at io.grpc.internal.ManagedChannelImpl.getNameResolver(ManagedChannelImpl.java:724) ~[org.apache.servicemix.bundles.grpc-1.30.2_1.jar:?]
    at io.grpc.internal.ManagedChannelImpl.<init>(ManagedChannelImpl.java:606) ~[org.apache.servicemix.bundles.grpc-1.30.2_1.jar:?]
    at io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:518) ~[org.apache.servicemix.bundles.grpc-1.30.2_1.jar:?]

当我在运行时调试GRPC代码时,我可以看到没有添加NameResolver。我认为这可能是类加载问题。

这是来自Apache Felix插件的配置的一部分

<Import-Package>
    ...,
    org.apache.servicemix.bundles.grpc.*; version="1.30.2_1",
    io.grpc*;
</Import-Package>
<Embed-Dependency>org.apache.servicemix.bundles.grpc;scope=compile</Embed-Dependency>

渠道建设代码(此代码使用io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder)

ManagedChannel channel = NettyChannelBuilder.forAddress("localhost", 4435)
                    .usePlaintext()
                    .build();

我只需要让GRPC客户端在OSGi包中工作。我们非常感谢您在这方面提供的任何帮助。

推荐答案

META-INF/services中添加相关的GRPC提供程序成功。

通过引用它得到了解决方案,它还在OSGi包中使用GRPChttps://github.com/wso2/micro-integrator/tree/v1.2.0-m4/components/mediation/inbound-endpoints/org.wso2.micro.integrator.inbound.endpoint

这篇关于在OSGi包中使用时,GRPC Java找不到NameResolver的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-19 04:29