Quarkus gRPC 构建问题
Posted
技术标签:
【中文标题】Quarkus gRPC 构建问题【英文标题】:Quarkus gRPC build issue 【发布时间】:2021-11-24 23:42:11 【问题描述】:关注这篇关于在 quarkus 中消费 gRPC 服务的博客https://quarkus.io/guides/grpc-service-consumption
通过运行 'mvn compile' 从 api 提供者提供的 proto 文件成功生成代码。
但在尝试构建应用时出现错误
“只有 Mutiny 服务接口、阻塞存根、基于 Mutiny 和 io.grpc.Channel 的反应存根可以通过@GrpcClient 注入”
./mvnw clean package -Dmaven.test.skip
...
[error]: Build step io.quarkus.grpc.deployment.GrpcClientProcessor#discoverInjectedGrpcServices threw an exception: javax.enterprise.inject.spi.DeploymentException: ...ServiceGrpc cannot be injected into ...ServiceGrpc - only Mutiny service interfaces, blocking stubs, reactive stubs based on Mutiny and io.grpc.Channel can be injected via @GrpcClient
[ERROR] at io.quarkus.grpc.deployment.GrpcClientProcessor.invalidInjectionPoint(GrpcClientProcessor.java:282)
[ERROR] at io.quarkus.grpc.deployment.GrpcClientProcessor.discoverInjectedGrpcServices(GrpcClientProcessor.java:170)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[ERROR] at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:820)
[ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
[ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
[ERROR] at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] at org.jboss.threads.JBossThread.run(JBossThread.java:501)
【问题讨论】:
你已经编辑了错误信息,所以我不能参考类名,但是你能把第一个...GrpcService
源代码的相关部分显示出来吗?
实际上我能够构建应用程序。请参阅下面代码中有关问题原因的评论。但我还没有功能齐全的 bean,请参阅代码中的 cmets 并帮助我找出错误。
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
【参考方案1】:
通过更改注入修复了构建问题,请参阅下面的代码。但仍无法使其完全正常工作,请参阅 cmets 中的详细信息:
public class SendMsgService
//THIS INJECTION WAS CAUSING THE ISSUE WITH THE BUILD
// @GrpcClient("msg-service")
// ServiceGrpc.ServiceStub stubInjected;
@GrpcClient("msg-service")
MutinyServiceGrpc.MutinyServiceStub stubInjected;
MutinyServiceGrpc.MutinyServiceStub stubPojo = MutinyServiceGrpc.newMutinyStub(Utils.getChannelUrlStr());
@GET
@Path("/send-message/message")
public void send(@PathParam("message") String message)
var msg = Utils.buildMessage(message);
BearerToken token = new BearerToken(ApiCredentials.getClientCredentialSource()::accessToken);
//THIS IS WORKING
stubPojo.withCallCredentials(token).sendTextToSubscriberAsOperator(msg).subscribe().with(item -> System.out.println(item),failure -> System.out.println("Failed with " + failure));
//THIS IS NOT WORKING
//stubInjected.withCallCredentials(token).sendTextToSubscriberAsOperator(msg).subscribe().with(item -> System.out.println(item),failure -> System.out.println("Failed with " + failure));
System.out.println("Msg has been sent");
application.properties
也有 var quarkus.grpc.clients.msg-service.host
,其值与 Utils.getChannelUrlStr()
相同。
【讨论】:
你的*.proto
文件是什么?以上是关于Quarkus gRPC 构建问题的主要内容,如果未能解决你的问题,请参考以下文章