grpc java-迭代Context.keyValueEntries?

grpc java-迭代Context.keyValueEntries?,java,grpc,grpc-java,Java,Grpc,Grpc Java,我是grpc的新手,正在开发我们的服务器端grpc代码 最终目标是“传递所有与特定模式匹配的变量” 元数据到子调用' 第一步是获取这些关键值 现在我可以得到任何固定(编译时已知)的键值对: 创建一个ServerInterceptor: 公共类HeaderInterceptor实现ServerInterceptor{ 私有静态最终字符串键\u KNOWN=“编译时”; 私有静态最终元数据。密钥元数据\u密钥= Metadata.Key.of(Key_已知,Metadata.ASCII_字符串_封送

我是grpc的新手,正在开发我们的服务器端grpc代码

最终目标是“传递所有与特定模式匹配的变量” 元数据到子调用'

第一步是获取这些关键值

现在我可以得到任何固定(编译时已知)的键值对:

  • 创建一个
    ServerInterceptor

    公共类HeaderInterceptor实现ServerInterceptor{
    私有静态最终字符串键\u KNOWN=“编译时”;
    私有静态最终元数据。密钥元数据\u密钥=
    Metadata.Key.of(Key_已知,Metadata.ASCII_字符串_封送器);
    公共静态最终上下文。键上下文\u键=
    上下文。键(已知键);
    @凌驾
    公共侦听器侦听呼叫(
    服务器呼叫,
    元数据,
    服务器调用处理程序(下一步){
    Context Context=Context.current().withValue(
    上下文键,
    get(metadata_KEY));
    //…其他代码
    }
    }
    
  • 在其他代码中:

  • 导入静态some.package.HeaderInterceptor.CONTEXT\u键;
    String value=CONTEXT_KEY.get();
    
    但是要求更通用,并且在运行时之前密钥名是未知的

    服务器拦截器中

    for(字符串键:metadata.keys())
    可以迭代所有键和值

    但是
    SOME\u generic\u KEY.get()
    的泛型版本是什么?我尝试了
    Context.current().keyValueEntries
    ,但无法编译(非公共)

    我找了又读

    但它们都没有提供(这个问题的)解决方案

    谁能帮忙,谢谢

    但是什么是某个_generic _KEY.get()的泛型版本?我尝试了Context.current().keyValueEntries,但无法编译(非公共)

    Context
    故意不允许对键进行迭代,因为这允许使用Java可见性来限制对设置/获取特定键的访问。这将产生与
    ThreadLocal
    类似的结果。键使用Java默认标识等式(
    k1==k2
    ),并且传递给
    上下文的字符串。键(已知键)
    是在
    get()过程中未使用的调试字符串

    虽然上下文是一种类似于映射的数据结构,但它并不是一种通用的映射,因为它是不可变的,使用普通的HashMap或POJO可以更好地存储许多相关的键

    那么,如何存储多个键,在元数据中找到的每个头对应一个键?使用地图。使用找到的条目创建一个映射,并将该映射存储在
    Context.Key
    Key中