我是靠谱客的博主 闪闪汉堡,这篇文章主要介绍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

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
74
package 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

image

  • 然后访问控制台http://localhost:9411/zipkin

image

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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部