亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

rpcx+zipkin

標簽:
Go

最近工作中常用到golang,学习了下golang的rpc框架,目前比较流行的有

1.rpcx(http://rpcx.site/)  类似dubbo,不用定义protobuf文件 客户端支持跨语言

2.go-micro(https://github.com/micro/go-micro) 没有啥优点

3.gRpc(https://github.com/grpc/grpc-go)跨语言,需要二次开发服务注册发现



        现在开发一般都是服务化的口号,把一个大的服务拆分成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


700

函数封装



700

客户端调用



700

服务1获取span


700

服务2获取span

700

zipkin效果图



作者:何亚祥
链接:https://www.jianshu.com/p/71081f6073e5

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消