class TraceConfiguration {

    @Bean
    public TraceWebFilter traceWebFilter() {
        return new TraceWebFilter();
    }

    //推送跟踪信息到eventBus中
    @Bean
    public SpanProcessor eventBusSpanExporter(EventBus eventBus) {
        return SimpleSpanProcessor.create(
            EventBusSpanExporter.create(eventBus)
        );
    }

    @Bean
    public OpenTelemetry createTelemetry(ObjectProvider<SpanProcessor> spanProcessors,
                                         ClusterProperties clusterProperties,
                                         TraceProperties traceProperties) {<FILL_FUNCTION_BODY>}

    @Bean
    public WebClientCustomizer traceWebClientCustomizer(OpenTelemetry openTelemetry) {
        return builder -> builder
            .filters(filters -> {
                if (!filters.contains(TraceExchangeFilterFunction.instance())) {
                    filters.add(TraceExchangeFilterFunction.instance());
                }
            });
    }
}

        SdkTracerProviderBuilder sdkTracerProvider = SdkTracerProvider.builder();
        spanProcessors.forEach(sdkTracerProvider::addSpanProcessor);
        traceProperties.buildProcessors().forEach(sdkTracerProvider::addSpanProcessor);
        SdkTracerProvider tracerProvider = sdkTracerProvider
            .setResource(Resource
                             .builder()
                             .put("service.name", clusterProperties.getId())
                             .build())
            .build();

        Runtime.getRuntime().addShutdownHook(new Thread(tracerProvider::close));

        OpenTelemetrySdk telemetry= OpenTelemetrySdk
            .builder()
            .setTracerProvider(tracerProvider)
            .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
            .build();
        TraceHolder.setup(telemetry);
        try {
            GlobalOpenTelemetry.set(telemetry);
        }catch (Throwable ignore){

        }
        return telemetry;
    
<no_super_class>