# kratosTrace **Repository Path**: go-study/kratos-trace ## Basic Information - **Project Name**: kratosTrace - **Description**: kratos中使用jaeger做链路追踪的例子 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-06-05 - **Last Updated**: 2024-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 博客地址 [kratos项目中使用jaeger做链路追踪](https://www.cnblogs.com/paulwhw/p/17402387.html) ## 注意otel包版本的问题,项目中所有服务使用同一个版本 **本项目使用的otel包的版本:** ```shell go get go.opentelemetry.io/otel@v1.11.1 ``` **boot/boot_trace.go中引入otel/semconv的版本:** ``` go.opentelemetry.io/otel/semconv/v1.12.0 ``` ## 使用了etcd做服务注册与发现 ## 在amount1项目中使用go-resty包封装http请求并加trace go-resty包的地址 [go-resty](https://github.com/go-resty/resty) 在amount1项目中新增了 flask_server.py 启动一个http的服务 ## 在amount1项目中实现ctxWithoutCancel - 如果项目中开启一个子协程去请求http,子协程与主协程共用一个ctx的话,如果主协程的ctx cancel了而此时子协程还没有执行完,子协程会报`context canceled`这个错误! - 所以此时需要给子协程的ctx封装成ctxWithoutCancel,这样主协程的ctx cancel了的话不影响子协程里代码的运行 - ctxWithoutCancel的封装写在了`internal/utils/ctx_without_cancel.go`中 - 此时也可以在链路中查到请求的链路,详情在博客中看:[kratos项目中使用jaeger做链路追踪](https://www.cnblogs.com/paulwhw/p/17402387.html) ## http的POST与GET请求业务中标准的写法 ### httpPost ![httpPost.png](httpPost.png) ### httpGet ![httpGet.png](httpGet.png) ## 并发请求相关方法 ### fx并发请求RPC:From+Walk+ForEach —— 从并发请求获取的结果中过滤 ![fx-Form+Walk+ForEach.png](fx-Form%2BWalk%2BForEach.png) ### fx并发请求http(带并发控制):From+Parallel(在Parallel流处理中加fx.WithWorkers进行并发控制)—— 并发请求http接口获取结果 ![fx-From+Paralle+并发控制1.png](fx-From%2BParalle%2B%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B61.png) ![fx-From+Paralle+并发控制2.png](fx-From%2BParalle%2B%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B62.png)