weibocom / motan-go

The golang implementation of Motan
Other
472 stars 112 forks source link

motan-go 是否支持opentracing? #178

Open Maary opened 5 years ago

Zha-Zha commented 5 years ago

是支持的,这是当时的pull request,里面有使用示例:https://github.com/weibocom/motan-go/pull/55

Maary commented 5 years ago

我在demo中实现opentracing的时候,不同于grpc方式,可以通过context创建子span,在motan-go中,无法传递context到服务端,对整条链路的追踪,似乎只能在一端完成,有没有办法建立整条链路的追踪信息。

rayzhang0603 commented 5 years ago

motan使用反射机制执行server端的service,由于golang没有类似java的threadlocal的隐式传递机制,在server端的业务逻辑中无法直接获取到rpc的context。 后续我们考虑通过服务契约自动生成golang service时在方法参数中显示增加context来提供类似机制,不过需要等多语言服务描述功能完成后(https://github.com/weibreeze 目前还在开发调试阶段),才能进行。

也可以考虑在service方法签名中显示增加rpc的context,然后在实现provider接口扩展,在反射调用时增加context参数临时解决这个问题。默认server端的provider是DefaultProvider,扩展方式可以参考provider包下的其他provider扩展类。

Maary commented 5 years ago

谢谢你的建议? 我现在遇到了一个问题,在业务代码中部分server端是java实现,部分client端是golang实现,然后通过motan提供的rpc服务调用方式,进行通讯,现在考虑到的一个问题是通过provider扩展golnag这边的服务通讯方式,同样java端也需要实现这个扩展,因为对motan-go的源码和java(motan)的实现方式不是很了解,所以想咨询一下这种解决办法的可行性。表示再次感谢。

rayzhang0603 commented 5 years ago

java端可以直接在业务代码中通过RpcContext.getContext()获取请求上下文,所以不需要额外处理。

所以只需要在golang的业务端处理一下,能获取到请求相关信息就可以了。