java 调用 go rpcx_rpcx+zipkin

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

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

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

开始正题,使用rpcx作为golang的rpcx框架,需要跟zipkin结合,把调用链记录下来,开始的时候很看到传参会有context,想想这个不就容易了吗,client端在调用时直接把opentracing中的span信息扔进去,server端再取出来,继续传递上报不就行了,写完demo的程序发现传递不过去,debug发现rpcx在处理的时候 context传递的key为share.ReqMetaDataKey("__req_metadata"),value 为map[string]string类型,自定义的值会被覆盖。也就是传递的opentracing的值实际是没有传过去,这个时候就想到的是复用rpcx的share.ReqMetaDataKey,通过map传递span的信息,server端再反解析出来,可惜map是的value是string类型的(心中默默念他大爷的),另辟蹊径在学习opentracing的库的时候看到,opentracing的可以使用两种载体传递span信息,HTTPHeadersCarrier和TextMapCarrier, 知道了这个点,就又回到复用share.ReqMetaDataKey上,解决的思路是在client端把span的信息放到map中,server端再取出来,下边上代码。

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

7f63a75ab9cab078941739b6e55846e3.png

函数封装

1574ead90618c84d99a4abccec1028f0.png

客户端调用

492bd96419d180ac0ad1c10508594332.png

服务1获取span

0ad90c6ae9783b92b0224173deffff37.png

服务2获取span

7ee7715c8e5e86d29c038b3200fc4c33.png

zipkin效果图

具体的代码可以去看源码,写的不好的地方多提意见,希望和大家一起成长,微信号123888994

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值