继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

rpcx+zipkin

慕哥9229398
关注TA
已关注
手记 1245
粉丝 199
获赞 913

        现在开发一般都是服务化的口号,把一个大的服务拆分成N个独立的小服务,划分领域职责,XX领域驱动设计就不多展开说了(主要我不懂),服务拆分之后就会带来一个很基础的问题:调用链追踪,这个对于追踪问题和服务优化会有很大的帮助。

       开始正题,使用rpcx作为golang的rpcx框架,需要跟zipkin结合把调用链记录下来,传参第一个参数为context,初步思路,client端在调用时把的span放入,server端取出来,上报数据。写完demo的程序发现传递不过去,debug发现rpcx在处理的时候 context传递的key为share.ReqMetaDataKey("__req_metadata"),value 为map[string]string类型,自定义的值会被覆盖。

         也就是传递的opentracing的值实际是没有传过去,这个时候就想到的是复用rpcx的share.ReqMetaDataKey,通过map传递span的信息,server端再反解析出来,opentracing的可以使用两种载体传递span信息,HTTPHeadersCarrier和TextMapCarrier, 知道了这个点,就又回到复用share.ReqMetaDataKey上,解决的思路是在client端把span的信息放到map中,server端再取出来,下边上代码。


github地址:封装的一个函数 rpcx-plugins 对应的demo程序  LearnRpcx


webp

函数封装



webp

客户端调用



webp

服务1获取span


webp

服务2获取span

webp

zipkin效果图



作者:nosixtools
链接:https://www.jianshu.com/p/71081f6073e5


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP