会计服务

这个服务计算销售产品的总金额。这只是模拟的,接收到的订单会被打印出来。

会计服务

追踪

初始化追踪

OpenTelemetry SDK 是通过 initTracerProvider 函数从 main 函数进行初始化的。

func initTracerProvider() (*sdktrace.TracerProvider, error) {
    ctx := context.Background()

    exporter, err := otlptracegrpc.New(ctx)
    if err != nil {
        return nil, err
    }
    tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exporter),
        sdktrace.WithResource(initResource()),
    )
    otel.SetTracerProvider(tp)
    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
    return tp, nil
}

当服务关闭时,应该调用 TracerProvider.Shutdown() 方法,确保所有 span 都被导出。这个服务在 main 函数中使用延迟函数来调用这个方法。

tp, err := initTracerProvider()
if err != nil {
    log.Fatal(err)
}
defer func() {
    if err := tp.Shutdown(context.Background()); err != nil {
        log.Printf("关闭追踪提供程序时出错: %v", err)
    }
}()

添加 Kafka ( Sarama ) 自动追踪

这个服务将通过 Kafka 主题接收 Checkout 服务的处理结果。为了对 Kafka 客户端进行追踪,开发者实现的 ConsumerHandler 需要被包装起来。

handler := groupHandler{} // 实现了 sarama.ConsumerGroupHandler
wrappedHandler := otelsarama.WrapConsumerGroupHandler(&handler)
最后修改 December 10, 2023: translate (a4350d6e)