gRPC-在异步通信中访问标头



我有一个kubernetes集群,那里运行着微服务。当我调用基于Java的微服务时,Spring引导应用程序接收所有HTTP请求,在内部调用另一个后端服务作为gRPC请求,获得响应,然后将HTTP响应返回给用户。这类似于分布式系统的典型工作方式。

使用Future.callback((方法调用gRPC后端。

ExecutorService executorService = Executors.newFixedThreadPool(3);
Futures.addCallback(listenableFuture, new FutureCallback<ResponseType>() {
@Override
public void onSuccess(ResponseType result) {

}
@Override
public void onFailure(Throwable t) {

}
}, executorService);

由于使用了Futures.addCallback,executedService中的任何可用线程都将接收响应。

在发出gRPC请求之前,我在上下文中设置了几个标头。有了这种设置,每当我收到来自后端grpc服务的响应时,我都想访问服务器之前设置的一些头字段。executerService中接收后端gRPC响应的线程没有来自先前设置的服务器的上下文。

有没有一种机制可以在响应返回时访问服务器头?

我尝试过使用Context.Key,但它不起作用,因为它使用了引用相等。由于线程不同,此信息将丢失。

使用Context.fixedContextExecutor:

包装一个Executor,使其始终将此上下文作为current((上下文执行。

最新更新