我是靠谱客的博主 闪闪汉堡,这篇文章主要介绍Sentinel-Go:3.Sentinel-Go的基本使用(三)Gin框架结合Zipkin实现链路追踪1.教程2.小练习,现在分享给大家,希望可以做个参考。
文章目录
- 1.教程
- 1.1 创建一下目录结构及代码
- 1.2 代码示例
- 1.3 调用接口,然后访问zipkin控制台,输入对应的资源名,查看链路效果
- 2.小练习
- 本文示例源码:
关于Zipkin的介绍和安装教程,请参考: Spring Cloud Sleuth结合Zipkin实现链路追踪。
1.教程
本文使用Gin框架来实现简单的web服务,并结合Zipkin实现链路追踪。
1.1 创建一下目录结构及代码
- sentinel-go-sample
- sentinel-go-sample-provider
- trace
- zipkin_sample_server.go
- trace
- sentinel-go-sample-provider
1.2 代码示例
zipkin_sample_server.go复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74package main import ( "github.com/gin-gonic/gin" "github.com/opentracing/opentracing-go" zipkinot "github.com/openzipkin-contrib/zipkin-go-opentracing" openzipkin "github.com/openzipkin/zipkin-go" "github.com/openzipkin/zipkin-go/reporter" zipkinHTTP "github.com/openzipkin/zipkin-go/reporter/http" "log" ) const ( serviceName = "zipkin_sample_server" // 当前服务名称,用于注册到zipkin serviceAddr = "127.0.0.1:8003" // 当前服务地址 zipkinAddr = "http://127.0.0.1:9411/api/v2/spans" // zipkin的服务地址 ) var ( zkReporter reporter.Reporter zkTracer opentracing.Tracer ) // 初始化zipkin客户端,并将服务注册到zipkin func initZipkinTracer(engine *gin.Engine) error { zkReporter = zipkinHTTP.NewReporter(zipkinAddr) endpoint, err := openzipkin.NewEndpoint(serviceName, serviceAddr) if err != nil { log.Fatalf("unable to create local endpoint: %+vn", err) return err } nativeTracer, err := openzipkin.NewTracer(zkReporter, openzipkin.WithTraceID128Bit(true), openzipkin.WithLocalEndpoint(endpoint)) if err != nil { log.Fatalf("unable to create tracer: %+vn", err) return err } zkTracer = zipkinot.Wrap(nativeTracer) opentracing.SetGlobalTracer(zkTracer) // 将tracer注入到gin的中间件中 engine.Use(func(c *gin.Context) { span := zkTracer.StartSpan(c.FullPath()) defer span.Finish() c.Next() }) return nil } // 接口1:Get方法 func sayHello(c *gin.Context) { name := c.Query("name") c.String(200, "hi~ %s~", name) } func main() { r := gin.Default() err := initZipkinTracer(r) if err != nil { panic(err) } defer zkReporter.Close() // 注册接口 r.GET("/hi", sayHello) // 端口要和注册到zipkin中的一致,即与serviceAddr的值一致 r.Run(":8003") }
1.3 调用接口,然后访问zipkin控制台,输入对应的资源名,查看链路效果
- 访问接口http://localhost:8003/hi?name=test
- 然后访问控制台http://localhost:9411/zipkin
2.小练习
读者可以将服务对接Sentinel-Go,添加流控规则,并将流控规则持久化;
添加流控规则,请参考:Sentinel-Go:1.Sentinel-Go的基本使用(一)流控规则;
流控规则持久化,请参考:Sentinel-Go:2.Sentinel-Go的基本使用(二)流控规则持久化;
也可以直接参考本文示例源码。
本文示例源码:
GitHub:WangYe8613/sentinel-go-sample
Gin框架结合Zipkin实现链路追踪:
[commit id:d944c4f756e71294e5f636c2baf99d969127beb0]
(Gin版)流控规则&规则持久化:
[commit id:d944c4f756e71294e5f636c2baf99d969127beb0]
最后
以上就是闪闪汉堡最近收集整理的关于Sentinel-Go:3.Sentinel-Go的基本使用(三)Gin框架结合Zipkin实现链路追踪1.教程2.小练习的全部内容,更多相关Sentinel-Go:3.Sentinel-Go内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复