我正在尝试在我们的wildfly应用程序中运行grpc服务器,以便使用quarkus从客户机java微服务连接到。我能够在grpc的9002端口上设置一个运行中的服务器,客户端微服务可以连接到该服务器。
在调用正在运行的grpc服务时,我可以看到rpc函数在wildfly应用程序中执行。但是我遇到了两个问题。对于服务器和服务设置,我使用以下代码作为示例。
问题
依赖项注入在此服务中不起作用。bean是在wildfly中创建的,但是无论我@注入grpc服务的对象是什么,它总是有一个 null
价值观。
服务器执行代码并用适当的grpc消息答复,但此消息从未到达客户端。不会显示任何错误。
有没有人对这些问题有经验,或者知道是否有可能在wildfly应用程序中运行grpc服务器?
我尝试的是:
我试图找到一个现有的grpc与wildfly的集成,但这目前正在进行中,因为我可以从这个open pull请求派生。
从这个邮件列表来看,似乎有人做了一个概念证明,并对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());
}
}
2条答案
按热度按时间qoefvg9y1#
我需要补充:
将响应发送回客户端。这个
null
然而,注射仍然是一个问题。dz6r00yl2#
我没有使用wildfly的经验,但它似乎是与应用程序上下文相关的经典问题。当你得到一个新的而不是通过ioc的对象时,就会发生这种情况。当你这么做的时候,注射就不起作用了。
你知道Spring吗?Spring也有同样的概念。也许你可以把这个spring代码转换成wildfly
下面是一个grpc和spring的例子,可以帮助您。https://github.com/apssouza22/modern-api-management/blob/master/services/shelf/src/main/java/com/apssouza/shelf/app.java
对于这个问题,您只需要更好地了解您的框架是如何工作的