Java服务(让我们称之为门户网站)既是gRPC客户端,也是服务器。它服务于数百万个gRPC客户端(服务器),每个客户端请求一些任务/资源。根据传入的请求,门户网站将找出后端服务并与其中一个或多个进行通信,并将返回的响应发送给始发客户端。因此,这里的要求是:
所以这里的问题是:
答案 0 :(得分:1)
gRPC Java可以相对容易地创建代理。对这样的代理使用异步存根很常见。当代理创建其传出RPC时,它可以在传出RPC的回调中保存对原始RPC的引用。当传出RPC的回调触发时,只需对原始RPC发出相同的调用。这解决了消息和错误。
截止日期和取消传播由io.grpc.Context
自动处理。
您可能想要引用this grpc-level proxy example(尚未合并到grpc / grpc-java)。它使用ClientCall
/ ServerCall
,因为它很方便,因为它不想解析消息。可以使用StreamObserver
API执行相同的操作。
这种代理的主要困难是观察流量控制。我引用的例子就是这样做的。如果使用StreamObserver
API,则应将传递到服务器的StreamObserver
强制转换为ServerCallStreamObserver
,并通过将ClientCallStreamObserver
传递给客户端存根来获取ClientResponseObserver
。