美文网首页
thrift 0.12关于context参数的问题

thrift 0.12关于context参数的问题

作者: lizyyy | 来源:发表于2019-04-19 14:39 被阅读0次

    问题:

    thrift0.12在gen go代码的时候默认增加了一个参数context

    IDL是:

      Response GetCommentAll(
        1:required i32 businessType
    )
     
     
    //生成go方法时增加了content:
    GetCommentAll(ctx context.Context, businessType int32) (r *Response, err error)
     
     
    //生成的php代码并未增加context:
    public function GetCommentAll($businessType)
    

    所以我们在go代码实现GetCommentAll 方法时必须加上 context参数

    func (s *Service) GetCommentAll(ctx context.Context, businessType int32) (r *thriftdemo.Response, err error) {
     ......
    }
    

    再来看看调用方法:

    //go调用时:
    newthriftdemo.GetCommentList(context.Background(), 1)
    //php调用时:
    $client->GetCommentList(1);
    

    我们发现,go调用时必须传递的context参数,但php上是没有的。

    这就带来了一个问题,本来想通过这个参数传递trace信息, 可是php怎么去传递呢?

    尝试在go上给context赋值,但是通过debug模式看,并没有把这个值传递过去:

    ctx := context.WithValue(context.Background(), "trycontext", "balabalabala")
    newthriftdemo.GetCommentList(ctx, 1)
     
     
    Run:
    2019/04/19 11:43:04 client:WriteMessageBegin(name="GetCommentList", typeId=1, seqid=1) => <nil>
    2019/04/19 11:43:04 client:WriteStructBegin(name="GetCommentList_args") => <nil>
    2019/04/19 11:43:04 client:WriteFieldBegin(name="businessType", typeId=0x8, id2) => <nil>
    2019/04/19 11:43:04 client:WriteI32(value=1) => <nil>
    2019/04/19 11:43:04 client:WriteFieldEnd() => <nil>
    2019/04/19 11:43:04 client:WriteFieldStop() => <nil>
    2019/04/19 11:43:04 client:WriteStructEnd() => <nil>
    2019/04/19 11:43:04 client:WriteMessageEnd() => <nil>
    2019/04/19 11:43:04 client:Flush()
    

    思考:

    看了下源码,关于0.12的diff:https://github.com/apache/thrift/commit/5785279e2e809f6c56dbbe0eb41d13fb17c88bdd#diff-8a01e4124163225974263ecb577e8bf4

    • f_types_ << indent() << " oprot.Flush(ctx)" << endl;

    但实际上,并没有传递ctx。

    在Changelog for Apache Thrift 0.12.0上写了:https://abi-laboratory.pro/index.php?view=changelog&l=apache-thrift&v=0.12.0

    *[THRIFT-4674] - Add stream context support into PHP/THttpClient

    感觉context这里是个bug,并没有传递过去,或者说context只能在 THttpClient 模式才能传递?

    找到一篇文章关于通过扩展TBinaryProtocol来增加一个数据传递,可是php怎么处理呢?https://www.kancloud.cn/digest/thrift/118992

    相关文章

      网友评论

          本文标题:thrift 0.12关于context参数的问题

          本文链接:https://www.haomeiwen.com/subject/htiqgqtx.html