我是靠谱客的博主 闪闪汉堡,最近开发中收集的这篇文章主要介绍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
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的基本使用(三)Gin框架结合Zipkin实现链路追踪1.教程2.小练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部