在我的项目中,我尝试使用opentracing
实现分布式跟踪。
我的微服务具有以下结构。
-- API-Gateway
|_ User-Service
|_ Notification
在我的API网关中,我启动并在API网关中,我使用到一个函数来开始跟踪,代码取自Setting up your tracer
在main()
中:
gatewayTracer := &apiTracer{tracer: startTracing("API Gateway")}
http.HandleFunc("/getemail", gatewayTracer.validatemail)
func (apitracer apiTracer) validatemail(res http.ResponseWriter, req *http.Request) {
validateEmailSpan := apitracer.tracer.StartSpan("Validate Email")
}
我使用validateemail()
从http.PostForm()
调用我的用户服务。
_, err := http.PostForm("http://user:7071/checkemail", url.Values{"uuid": {uuid}, "email": {email}})
此处uuid
用于单独的任务,而不用于跟踪。
我无法使用Span
将此PostForm()
发布到下一个服务。
如何克服这个问题?
答案 0 :(得分:1)
我认为无法从PostForm
开始。您将需要使用http.NewRequest
创建POST请求,使用Inject
创建标头中的跨度,并使用Client.Do
发送请求。