本文介紹了在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包中使用GRPC
https://github.com/wso2/micro-integrator/tree/v1.2.0-m4/components/mediation/inbound-endpoints/org.wso2.micro.integrator.inbound.endpoint
這篇關于在OSGi包中使用時,GRPC Java找不到NameResolver的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,