2017-07-16 65 views
0

我必須在android grpc客戶端中添加一個自定義標題。我無法成功發送它。Android如何在grpc客戶端添加自定義標題?

public class HeaderClientInterceptor implements ClientInterceptor { 
     @Override 
    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, 
    CallOptions callOptions, Channel next) { 

    return new SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) { 

    @Override 
    public void start(Listener<RespT> responseListener, Metadata headers)  { 
    /* put custom header */ 
    Timber.d("header sending to server:"); 


    Metadata fixedHeaders=new Metadata(); 
    Metadata.Key<String> key = 
     Metadata.Key.of("Grps-Matches-Key", Metadata.ASCII_STRING_MARSHALLER); 
    fixedHeaders.put(key, "primary.secondary"); 

    headers.merge(fixedHeaders); 

    super.start(new SimpleForwardingClientCallListener<RespT>(responseListener) { 
     @Override 
     public void onHeaders(Metadata headers) { 
     /** 
     * if you don't need receive header from server, 
     * you can use {@link io.grpc.stub.MetadataUtils attachHeaders} 
     * directly to send header 
     */ 

     Timber.e("header received from server:" + headers.toString()); 
     super.onHeaders(headers); 
     } 
    }, headers); 
    } 
}; 
} 
} 

編輯:採用這種方式添加的自定義頁眉成功我GRPC呼叫我打電話這樣

現在,

ClientInterceptor interceptor = new HeaderClientInterceptor(); 
Channel channel = ManagedChannelBuilder 
      .forAddress(BuildConfig.HOST, BuildConfig.PORT) 
      .build(); 
Channel channelWithHeader = ClientInterceptors 
      .intercept(channel, interceptor); 

ServiceGrpc.ServiceBlockingStub service = ServiceGrpc 
    .newBlockingStub(channelWithHeader); 

///我建立了上述請求,並如下所示在僞通話中調用它。

 Iterator<Model> dataItems = service.getItems(SOMERequestBuilderObj); 


I am trying to add a custom header like this - 

「GRPS百搭重點:primary.secondary」

在REST API調用,我會加入這個作爲標題一樣, builder.header(「GRPS-Matches- Key「,」primary.secondary「);

希望這會有所幫助。

回答

3

該問題中的編輯版本也起作用。在GRPC中有很多添加標題的方法(稱爲元數據)。我們可以使用攔截器在上面的問題中添加元數據,或者我們可以爲客戶端存根添加元數據,或者可以在客戶端存根通道發出請求之前添加它。

// create a custom header 
Metadata header=new Metadata(); 
Metadata.Key<String> key = 
    Metadata.Key.of("Grps-Matches-Key", Metadata.ASCII_STRING_MARSHALLER); 
header.put(key, "match.items"); 

// create client stub 
ServiceGrpc.ServiceBlockingStub stub = ServiceGrpc 
    .newBlockingStub(channel); 

製備如下所示使用MetadataUtils

stub = MetadataUtils.attachHeaders(stub, header); 
任何請求之前添加報頭
相關問題