设为首页 加入收藏

TOP

[系列] go-gin-api 路由中间件 - Jaeger 链路追踪(六)(二)
2019-09-30 16:41:10 】 浏览:96
Tags:系列 go-gin-api 路由 中间件 Jaeger 链路 追踪
ror", err.Error())) } return err } }

gRPC 拦截

func serverInterceptor(tracer opentracing.Tracer) grpc.UnaryServerInterceptor {
    return func(ctx context.Context,
        req interface{},
        info *grpc.UnaryServerInfo,
        handler grpc.UnaryHandler) (resp interface{}, err error) {

        md, ok := metadata.FromIncomingContext(ctx)
        if !ok {
            md = metadata.New(nil)
        }

        spanContext, err := tracer.Extract(opentracing.TextMap, MDReaderWriter{md})
        if err != nil && err != opentracing.ErrSpanContextNotFound {
            grpclog.Errorf("extract from metadata err: %v", err)
        } else {
            span := tracer.StartSpan(
                info.FullMethod,
                ext.RPCServerOption(spanContext),
                opentracing.Tag{Key: string(ext.Component), Value: "gRPC"},
                ext.SpanKindRPCServer,
            )
            defer span.Finish()

            ParentContext = opentracing.ContextWithSpan(ctx, span)
        }

        return handler(ParentContext, req)
    }
}

上面是一些核心的代码,涉及到的全部代码我都会上传到 github,供下载。

运行

启动服务

// 启动 Listen 服务
cd listen && go run main.go

// 启动 Speak 服务
cd speak && go run main.go

// 启动 Read 服务
cd read && go run main.go

// 启动 Write 服务
cd write && go run main.go

// 启动 Sing 服务
cd sing && go run main.go

// 启动 go-gin-api 服务
cd go-gin-api && go run main.go

访问路由

http://127.0.0.1:9999/jaeger_test

效果

就到这吧。

API 源码地址

https://github.com/xinliangnote/go-gin-api

Service 源码地址

https://github.com/xinliangnote/go-jaeger-demo

go-gin-api 系列文章

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇golang1.13中重要的新特新 下一篇Go微服务容错与韧性(Service Resi..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目