| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package main
- import (
- "context"
- "log"
- "math/rand"
- "net/http"
- "time"
- "github.com/gin-gonic/gin"
- "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
- "go.opentelemetry.io/otel"
- "go.opentelemetry.io/otel/propagation"
- otel2 "standard/open_telemetry/otel"
- )
- const (
- name = "app2"
- addr = ":8081"
- otelTarget = "localhost:4317"
- )
- func main() {
- ctx := context.Background()
- serviceName := "ServiceA" // 服务名称
- jaegerEndpoint := "http://7162377c.r11.cpolar.top/api/v2/spans" // Jaeger 的 Collector Endpoint
- // 初始化 OpenTelemetry SDK
- shutdown, err := otel2.SetupOTelSDK(ctx, serviceName, jaegerEndpoint)
- if err != nil {
- log.Fatalf("Failed to setup OpenTelemetry SDK: %v", err)
- }
- defer shutdown(ctx)
- // Setup Gin router
- router := gin.Default()
- router.Use(otelgin.Middleware(name))
- router.GET("/work", work)
- // Start the server
- err = router.Run(addr)
- if err != nil {
- log.Panicf("Failed to start the server: %v", err)
- }
- }
- func work(c *gin.Context) {
- duration := time.Duration(rand.Intn(3)) * time.Second
- time.Sleep(duration)
- c.JSON(http.StatusOK, gin.H{
- "message": "Hello from app2!",
- "duration_second": duration.Seconds(),
- })
- }
- // callServiceB 调用 ServiceB 的 /serviceB 接口
- func callServiceB(ctx context.Context) {
- url := "http://localhost:8081/serviceB" // ServiceB 的地址
- req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
- if err != nil {
- log.Printf("Failed to create request: %v", err)
- return
- }
- // 将上下文中的追踪信息注入到请求头中,以便 ServiceB 可以继续追踪
- otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))
- log.Printf("Request headers: %+v", req.Header)
- client := &http.Client{}
- resp, err := client.Do(req)
- if err != nil {
- log.Printf("Failed to call ServiceB: %v", err)
- return
- }
- defer resp.Body.Close()
- log.Println("Called ServiceB successfully")
- }
|