我是靠谱客的博主 闪闪汉堡,最近开发中收集的这篇文章主要介绍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.gopackage 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的基本使用(三)Gin框架结合Zipkin实现链路追踪1.教程2.小练习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复