【发布时间】:2020-09-04 10:06:23
【问题描述】:
我正在尝试在 WildFly 应用程序中运行 gRPC 服务器,以使用 Quarkus 从客户端 Java 微服务连接。
我能够在端口 9002 上为 gRPC 设置一个正在运行的服务器,客户端微服务可以连接到该服务器。
当调用正在运行的 gRPC 服务时,我可以看到 rpc 函数在 WildFly 应用程序中执行。但是,我遇到了两个问题。
对于服务器和服务设置,我以this code 为例。
问题
- 依赖注入在此服务中不起作用。该 bean 是在 WildFly 中创建的,但无论我 @Inject 到 gRPC 服务中的什么对象,它总是有一个
null值。 - 服务器执行代码并回复适当的 gRPC 消息,但此消息永远不会到达客户端。不会显示任何错误。
有没有人遇到过这些问题,或者知道是否可以在 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());
}
}
【问题讨论】:
标签: java wildfly grpc grpc-java