gRPC请求中对header进行处理

本文介绍了如何在gRPC请求中处理header,分别详细讲解了Android(Java)、iOS(Objective-C)以及Java Server端的设置方法,包括客户端请求header的添加、服务端返回header的获取,涉及到拦截器的使用。
摘要由CSDN通过智能技术生成

gRPC请求设置header(Android、iOS、JavaServer)

1.[Android (Java)]

1.1只设置客户端请求时附带的header

见类 io.grpc.stub.MetadataUtils,其中有个方法:

  /**
   * Attaches a set of request headers to a stub.
   *
   * @param stub to bind the headers to.
   * @param extraHeaders the headers to be passed by each call on the returned stub.
   * @return an implementation of the stub with {@code extraHeaders} bound to each call.
   */
  @ExperimentalApi("https://github.com/grpc/grpc-java/issues/1789")
  public static <T extends AbstractStub<T>> T attachHeaders(
      T stub,
      final Metadata extraHeaders) {
    return stub.withInterceptors(newAttachHeadersInterceptor(extraHeaders));
  }

稍微自己封装一下的效果,如下:

    private static <T extends AbstractStub<T>> T attachHeaders(T stub, final Map<String, String> headerMap) {
        Metadata extraHeaders = new Metadata();
        if (headerMap != null) {
            for (String key : headerMap.keySet()) {
                Metadata.Key<String> customHeadKey = Metadata.Ke
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
gRPC拦截器实现gRPC请求的内部转发,可以使用gRPC提供的Stub对象来发送gRPC请求。首先,需要在代码注入Stub对象,代码如下: ```java @Autowired private XxxServiceGrpc.XxxServiceBlockingStub xxxServiceBlockingStub; ``` 然后,在拦截器使用Stub对象来发送gRPC请求,代码如下: ```java public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<RespT, ReqT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) { // 获取请求的方法名称和参数 String methodName = call.getMethodDescriptor().getFullMethodName(); ReqT request = call.getMessage(); // 构造请求的上下文 Context.CancellableContext withCancellation = Context.current().withCancellation(); withCancellation.attach(); // 发送gRPC请求并获取响应结果 RespT response = xxxServiceBlockingStub.withDeadlineAfter(5, TimeUnit.SECONDS).withInterceptors(new HeaderClientInterceptor(headers)).execute(request); // 返回gRPC响应结果给调用方 return new ServerCall.Listener<ReqT>() {}; } ``` 在这段代码,我们使用Stub对象向目标gRPC服务发送gRPC请求,并将请求头和参数传递过去。然后,我们将目标gRPC服务的响应结果返回给调用方。 需要注意的是,在发送gRPC请求时,我们可以使用`withDeadlineAfter()`方法设置请求的超时时间,以避免请求一直阻塞。另外,我们还可以使用`withInterceptors()`方法设置请求的拦截器,以添加自定义的请求头等信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值