会计服务
这个服务计算销售产品的总金额。这只是模拟的,接收到的订单会被打印出来。
追踪
初始化追踪
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)