我正在尝试在WildFly应用程序中运行gRPC服务器,以使用Quarkus从客户端Java微服务连接到该服务器。
我能够在端口9002上为gRPC设置一个正在运行的服务器,客户端微服务可以连接到该服务器。
调用正在运行的gRPC服务时,我可以看到rpc函数在WildFly应用程序内部执行。我遇到了两个问题。
对于服务器和服务设置,我以this code为例。
问题
null
值。是否有人有这些问题的经验,或者是否知道是否有可能在WildFly应用程序中运行gRPC服务器?
我尝试过的事情:
我试图找到与WildFly的现有gRPC集成,但是由于我可以从this open pull request派生出来,所以目前正在开发中。 在this mailing list中,似乎有人进行了概念验证并更改了WildFly代码以使其正常工作,但这不是我们想要的解决方案,因为我们不愿更改WildFly代码。
相关代码
客户代码挂在blockingStub.updateBalance(request)
调用上,因为从未收到答复:
BalanceUpdateGrpc.BalanceUpdateBlockingStub blockingStub = BalanceUpdateGrpc.newBlockingStub(channel);
var request = BalanceUpdateRequest.newBuilder()
.setContractNumber("111")
.setBalance((float) 100.2)
.setDate(BalanceUpdateRequest.Date
.newBuilder()
.setDay(3)
.setMonth(11)
.setYear(2020)
.build())
.build();
var reply = blockingStub.updateBalance(request);
服务代码:
@Singleton
public class BalanceUpdateService extends BalanceUpdateGrpc.BalanceUpdateImplBase {
@Inject
private DossierDAO dossierDAO;
@Override
public void updateBalance(BalanceUpdateRequest balanceUpdateRequest, StreamObserver<BalanceUpdateReply> responseObserver) {
//Just reply with true
//dossierDAO is always null when used in this code block
responseObserver.onNext(BalanceUpdateReply.newBuilder().setSuccess(true).build());
}
}
答案 0 :(得分:2)
我没有WildFly的经验,但似乎是与应用程序上下文有关的经典问题。当您使用NEW而不是通过IOC获取对象时,就会发生这种情况。当您这样做时,注射将不起作用。
知道春天吗? Spring具有相同的概念。也许您可以将此Spring代码转换为WildFly
public static void main(String[] args)throws IOException, InterruptedException {
SpringApplication springApplication = new SpringApplication(App.class, GrpcConfig.class);
//Getting application context with all objects created with annotations
ConfigurableApplicationContext context = springApplication.run(args);
// Getting object created by Spring "Wildfly" from outside the context
GrpcServer grpcServer = context.getBean(GrpcServer.class);
grpcServer.start();
}
以下是gRPC和Spring的示例,可以为您提供帮助。 https://github.com/apssouza22/modern-api-management/blob/master/services/shelf/src/main/java/com/apssouza/shelf/App.java
对于这个问题,您只需要更好地了解框架的工作原理
答案 1 :(得分:1)
我需要添加:
responseObserver.onCompleted()
到服务以将响应发送回客户端。
null
注入仍然是一个问题。