Merge branch 'apache-3.2' into apache-3.3
# Conflicts: # dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml # dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml # dubbo-dependencies-bom/pom.xml # dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java # dubbo-spring-boot/pom.xml
This commit is contained in:
commit
40f44f91f5
|
|
@ -254,7 +254,7 @@
|
|||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
<version>1.19.1</version>
|
||||
<version>1.19.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<description>The spring config module of dubbo project</description>
|
||||
<properties>
|
||||
<skip_maven_deploy>false</skip_maven_deploy>
|
||||
<spring-boot.version>2.7.17</spring-boot.version>
|
||||
<spring-boot.version>2.7.18</spring-boot.version>
|
||||
<!-- Uncomment spring_version property to check Spring 4.x compatibility -->
|
||||
<!-- <spring_version>4.3.30.RELEASE</spring_version> -->
|
||||
</properties>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
<properties>
|
||||
<skip_maven_deploy>true</skip_maven_deploy>
|
||||
<spring-boot-maven-plugin.version>2.7.17</spring-boot-maven-plugin.version>
|
||||
<spring-boot-maven-plugin.version>2.7.18</spring-boot-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<properties>
|
||||
<skip_maven_deploy>true</skip_maven_deploy>
|
||||
<spring-boot-maven-plugin.version>2.7.17</spring-boot-maven-plugin.version>
|
||||
<spring-boot-maven-plugin.version>2.7.18</spring-boot-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@
|
|||
|
||||
<properties>
|
||||
<skip_maven_deploy>true</skip_maven_deploy>
|
||||
<spring-boot.version>2.7.17</spring-boot.version>
|
||||
<spring-boot-maven-plugin.version>2.7.17</spring-boot-maven-plugin.version>
|
||||
<micrometer-core.version>1.11.5</micrometer-core.version>
|
||||
<spring-boot.version>2.7.18</spring-boot.version>
|
||||
<spring-boot-maven-plugin.version>2.7.18</spring-boot-maven-plugin.version>
|
||||
<micrometer-core.version>1.12.0</micrometer-core.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<properties>
|
||||
<skip_maven_deploy>true</skip_maven_deploy>
|
||||
<spring-boot-maven-plugin.version>2.7.17</spring-boot-maven-plugin.version>
|
||||
<spring-boot-maven-plugin.version>2.7.18</spring-boot-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
<spring_version>5.3.25</spring_version>
|
||||
<spring_security_version>5.8.8</spring_security_version>
|
||||
<javassist_version>3.29.2-GA</javassist_version>
|
||||
<byte-buddy_version>1.14.9</byte-buddy_version>
|
||||
<byte-buddy_version>1.14.10</byte-buddy_version>
|
||||
<netty_version>3.2.10.Final</netty_version>
|
||||
<netty4_version>4.1.101.Final</netty4_version>
|
||||
<mina_version>2.2.1</mina_version>
|
||||
|
|
@ -113,7 +113,7 @@
|
|||
<cxf_version>3.5.5</cxf_version>
|
||||
<thrift_version>0.19.0</thrift_version>
|
||||
<hessian_version>4.0.66</hessian_version>
|
||||
<protobuf-java_version>3.25.0</protobuf-java_version>
|
||||
<protobuf-java_version>3.25.1</protobuf-java_version>
|
||||
<javax_annotation-api_version>1.3.2</javax_annotation-api_version>
|
||||
<servlet_version>3.1.0</servlet_version>
|
||||
<jetty_version>9.4.53.v20231009</jetty_version>
|
||||
|
|
@ -132,14 +132,14 @@
|
|||
<commons_lang3_version>3.12.0</commons_lang3_version>
|
||||
<protostuff_version>1.8.0</protostuff_version>
|
||||
<envoy_api_version>0.1.35</envoy_api_version>
|
||||
<micrometer.version>1.11.5</micrometer.version>
|
||||
<micrometer.version>1.12.0</micrometer.version>
|
||||
<opentelemetry.version>1.26.0</opentelemetry.version>
|
||||
<zipkin-reporter.version>2.16.4</zipkin-reporter.version>
|
||||
<micrometer-tracing.version>1.1.6</micrometer-tracing.version>
|
||||
<micrometer-tracing.version>1.2.0</micrometer-tracing.version>
|
||||
<t_digest.version>3.3</t_digest.version>
|
||||
<prometheus_client.version>0.16.0</prometheus_client.version>
|
||||
<reactive.version>1.0.4</reactive.version>
|
||||
<reactor.version>3.5.11</reactor.version>
|
||||
<reactor.version>3.6.0</reactor.version>
|
||||
<rxjava.version>2.2.21</rxjava.version>
|
||||
<okhttp_version>3.14.9</okhttp_version>
|
||||
|
||||
|
|
@ -186,7 +186,7 @@
|
|||
|
||||
<jaxb_version>2.2.7</jaxb_version>
|
||||
<activation_version>1.2.0</activation_version>
|
||||
<test_container_version>1.19.1</test_container_version>
|
||||
<test_container_version>1.19.3</test_container_version>
|
||||
<etcd_launcher_version>0.7.6</etcd_launcher_version>
|
||||
<hessian_lite_version>3.2.13</hessian_lite_version>
|
||||
<swagger_version>1.6.12</swagger_version>
|
||||
|
|
@ -196,7 +196,7 @@
|
|||
<metrics_version>2.0.6</metrics_version>
|
||||
<sofa_registry_version>5.4.3</sofa_registry_version>
|
||||
<gson_version>2.10.1</gson_version>
|
||||
<jackson_version>2.15.3</jackson_version>
|
||||
<jackson_version>2.16.0</jackson_version>
|
||||
<mortbay_jetty_version>6.1.26</mortbay_jetty_version>
|
||||
<portlet_version>2.0</portlet_version>
|
||||
<maven_flatten_version>1.5.0</maven_flatten_version>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import java.util.concurrent.CompletableFuture;
|
|||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
{{#deprecated}}
|
||||
@java.lang.Deprecated
|
||||
@java.lang.Deprecated
|
||||
{{/deprecated}}
|
||||
public interface {{interfaceClassName}} extends org.apache.dubbo.rpc.model.DubboStub {
|
||||
|
||||
|
|
@ -40,10 +40,10 @@ public interface {{interfaceClassName}} extends org.apache.dubbo.rpc.model.Dubbo
|
|||
|
||||
{{#unaryMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
{{#deprecated}}
|
||||
@java.lang.Deprecated
|
||||
@java.lang.Deprecated
|
||||
{{/deprecated}}
|
||||
{{outputType}} {{methodName}}({{inputType}} request);
|
||||
|
||||
|
|
@ -55,20 +55,20 @@ public interface {{interfaceClassName}} extends org.apache.dubbo.rpc.model.Dubbo
|
|||
|
||||
{{#serverStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
{{#deprecated}}
|
||||
@java.lang.Deprecated
|
||||
@java.lang.Deprecated
|
||||
{{/deprecated}}
|
||||
void {{methodName}}({{inputType}} request, org.apache.dubbo.common.stream.StreamObserver<{{outputType}}> responseObserver);
|
||||
{{/serverStreamingMethods}}
|
||||
|
||||
{{#biStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
{{#deprecated}}
|
||||
@java.lang.Deprecated
|
||||
@java.lang.Deprecated
|
||||
{{/deprecated}}
|
||||
org.apache.dubbo.common.stream.StreamObserver<{{inputType}}> {{methodName}}(org.apache.dubbo.common.stream.StreamObserver<{{outputType}}> responseObserver);
|
||||
{{/biStreamingMethods}}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
|
||||
{{#packageName}}
|
||||
package {{packageName}};
|
||||
package {{packageName}};
|
||||
{{/packageName}}
|
||||
|
||||
import org.apache.dubbo.common.stream.StreamObserver;
|
||||
|
|
@ -38,41 +38,26 @@ public interface {{interfaceClassName}} extends org.apache.dubbo.rpc.model.Dubbo
|
|||
{{/commonPackageName}}
|
||||
{{#unaryMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
{{outputType}} {{methodName}}({{inputType}} request);
|
||||
|
||||
default CompletableFuture<{{outputType}}> {{methodName}}Async({{inputType}} request){
|
||||
return CompletableFuture.completedFuture({{methodName}}(request));
|
||||
}
|
||||
CompletableFuture<{{outputType}}> {{methodName}}Async({{inputType}} request);
|
||||
|
||||
|
||||
/**
|
||||
* This server stream type unary method is <b>only</b> used for generated stub to support async unary method.
|
||||
* It will not be called if you are NOT using Dubbo3 generated triple stub and <b>DO NOT</b> implement this method.
|
||||
*/
|
||||
default void {{methodName}}({{inputType}} request, StreamObserver<{{outputType}}> responseObserver){
|
||||
{{methodName}}Async(request).whenComplete((r, t) -> {
|
||||
if (t != null) {
|
||||
responseObserver.onError(t);
|
||||
} else {
|
||||
responseObserver.onNext(r);
|
||||
responseObserver.onCompleted();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
{{/unaryMethods}}
|
||||
|
||||
{{#serverStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
void {{methodName}}({{inputType}} request, StreamObserver<{{outputType}}> responseObserver);
|
||||
{{/serverStreamingMethods}}
|
||||
|
||||
{{#biStreamingWithoutClientStreamMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
StreamObserver<{{inputType}}> {{methodName}}(StreamObserver<{{outputType}}> responseObserver);
|
||||
{{/biStreamingWithoutClientStreamMethods}}
|
||||
|
|
@ -80,7 +65,7 @@ public interface {{interfaceClassName}} extends org.apache.dubbo.rpc.model.Dubbo
|
|||
|
||||
{{#clientStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
StreamObserver<{{inputType}}> {{methodName}}(StreamObserver<{{outputType}}> responseObserver);
|
||||
{{/clientStreamingMethods}}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
|
||||
{{#packageName}}
|
||||
package {{packageName}};
|
||||
package {{packageName}};
|
||||
{{/packageName}}
|
||||
|
||||
import org.apache.dubbo.common.stream.StreamObserver;
|
||||
|
|
@ -125,7 +125,7 @@ public final class {{className}} {
|
|||
|
||||
{{#unaryMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
@Override
|
||||
public {{outputType}} {{methodName}}({{inputType}} request){
|
||||
|
|
@ -137,9 +137,8 @@ public final class {{className}} {
|
|||
}
|
||||
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
@Override
|
||||
public void {{methodName}}({{inputType}} request, StreamObserver<{{outputType}}> responseObserver){
|
||||
StubInvocationUtil.unaryCall(invoker, {{methodName}}Method , request, responseObserver);
|
||||
}
|
||||
|
|
@ -147,7 +146,7 @@ public final class {{className}} {
|
|||
|
||||
{{#serverStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
@Override
|
||||
public void {{methodName}}({{inputType}} request, StreamObserver<{{outputType}}> responseObserver){
|
||||
|
|
@ -157,7 +156,7 @@ public final class {{className}} {
|
|||
|
||||
{{#biStreamingWithoutClientStreamMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
@Override
|
||||
public StreamObserver<{{inputType}}> {{methodName}}(StreamObserver<{{outputType}}> responseObserver){
|
||||
|
|
@ -167,7 +166,7 @@ public final class {{className}} {
|
|||
|
||||
{{#clientStreamingMethods}}
|
||||
{{#javaDoc}}
|
||||
{{{javaDoc}}}
|
||||
{{{javaDoc}}}
|
||||
{{/javaDoc}}
|
||||
@Override
|
||||
public StreamObserver<{{inputType}}> {{methodName}}(StreamObserver<{{outputType}}> responseObserver){
|
||||
|
|
@ -193,6 +192,30 @@ public final class {{className}} {
|
|||
};
|
||||
}
|
||||
|
||||
{{#unaryMethods}}
|
||||
@Override
|
||||
public CompletableFuture<{{outputType}}> {{methodName}}Async({{inputType}} request){
|
||||
return CompletableFuture.completedFuture({{methodName}}(request));
|
||||
}
|
||||
{{/unaryMethods}}
|
||||
|
||||
/**
|
||||
* This server stream type unary method is <b>only</b> used for generated stub to support async unary method.
|
||||
* It will not be called if you are NOT using Dubbo3 generated triple stub and <b>DO NOT</b> implement this method.
|
||||
*/
|
||||
{{#unaryMethods}}
|
||||
public void {{methodName}}({{inputType}} request, StreamObserver<{{outputType}}> responseObserver){
|
||||
{{methodName}}Async(request).whenComplete((r, t) -> {
|
||||
if (t != null) {
|
||||
responseObserver.onError(t);
|
||||
} else {
|
||||
responseObserver.onNext(r);
|
||||
responseObserver.onCompleted();
|
||||
}
|
||||
});
|
||||
}
|
||||
{{/unaryMethods}}
|
||||
|
||||
@Override
|
||||
public final Invoker<{{interfaceClassName}}> getInvoker(URL url) {
|
||||
PathResolver pathResolver = url.getOrDefaultFrameworkModel()
|
||||
|
|
|
|||
|
|
@ -98,6 +98,6 @@ public class NacosAggregateListener {
|
|||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(notifyListener, serviceNames, serviceInstances);
|
||||
return Objects.hash(notifyListener);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@
|
|||
package org.apache.dubbo.spring.boot.observability.autoconfigure.otel;
|
||||
|
||||
import org.apache.dubbo.common.Version;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.common.utils.ClassUtils;
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.rpc.model.ModuleModel;
|
||||
import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties;
|
||||
import org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration;
|
||||
import org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils;
|
||||
|
|
@ -27,6 +29,7 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.opentelemetry.api.common.AttributeKey;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
|
|
@ -43,57 +46,78 @@ import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
|
|||
*/
|
||||
@ConditionalOnProperty(prefix = DUBBO_PREFIX, name = "enabled", matchIfMissing = true)
|
||||
@AutoConfiguration(
|
||||
before = DubboMicrometerTracingAutoConfiguration.class,
|
||||
afterName = "org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration")
|
||||
before = DubboMicrometerTracingAutoConfiguration.class,
|
||||
afterName = "org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration")
|
||||
@ConditionalOnDubboTracingEnable
|
||||
@ConditionalOnClass(
|
||||
name = {
|
||||
"io.micrometer.tracing.otel.bridge.OtelTracer",
|
||||
"io.opentelemetry.sdk.trace.SdkTracerProvider",
|
||||
"io.opentelemetry.api.OpenTelemetry",
|
||||
"io.micrometer.tracing.SpanCustomizer"
|
||||
})
|
||||
name = {
|
||||
"io.micrometer.tracing.otel.bridge.OtelTracer",
|
||||
"io.opentelemetry.sdk.trace.SdkTracerProvider",
|
||||
"io.opentelemetry.api.OpenTelemetry",
|
||||
"io.micrometer.tracing.SpanCustomizer"
|
||||
})
|
||||
@EnableConfigurationProperties(DubboConfigurationProperties.class)
|
||||
public class OpenTelemetryAutoConfiguration {
|
||||
|
||||
/**
|
||||
* Default value for application name if {@code spring.application.name} is not set.
|
||||
*/
|
||||
private static final String DEFAULT_APPLICATION_NAME = "dubbo-application";
|
||||
private static final String DEFAULT_APPLICATION_NAME = "application";
|
||||
|
||||
private final DubboConfigurationProperties dubboConfigProperties;
|
||||
|
||||
OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties) {
|
||||
private final ModuleModel moduleModel;
|
||||
|
||||
OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties, ModuleModel moduleModel) {
|
||||
this.dubboConfigProperties = dubboConfigProperties;
|
||||
this.moduleModel = moduleModel;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.opentelemetry.api.OpenTelemetry openTelemetry(
|
||||
io.opentelemetry.sdk.trace.SdkTracerProvider sdkTracerProvider,
|
||||
io.opentelemetry.context.propagation.ContextPropagators contextPropagators) {
|
||||
io.opentelemetry.sdk.trace.SdkTracerProvider sdkTracerProvider,
|
||||
io.opentelemetry.context.propagation.ContextPropagators contextPropagators) {
|
||||
return io.opentelemetry.sdk.OpenTelemetrySdk.builder()
|
||||
.setTracerProvider(sdkTracerProvider)
|
||||
.setPropagators(contextPropagators)
|
||||
.build();
|
||||
.setTracerProvider(sdkTracerProvider)
|
||||
.setPropagators(contextPropagators)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.opentelemetry.sdk.trace.SdkTracerProvider otelSdkTracerProvider(
|
||||
ObjectProvider<io.opentelemetry.sdk.trace.SpanProcessor> spanProcessors,
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler sampler) {
|
||||
String applicationName = dubboConfigProperties.getApplication().getName();
|
||||
if (StringUtils.isEmpty(applicationName)) {
|
||||
applicationName = DEFAULT_APPLICATION_NAME;
|
||||
ObjectProvider<io.opentelemetry.sdk.trace.SpanProcessor> spanProcessors,
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler sampler) {
|
||||
String applicationName = moduleModel
|
||||
.getApplicationModel()
|
||||
.getApplicationConfigManager()
|
||||
.getApplication()
|
||||
.map(ApplicationConfig::getName)
|
||||
.orElse(DEFAULT_APPLICATION_NAME);
|
||||
// Due to https://github.com/micrometer-metrics/tracing/issues/343
|
||||
String RESOURCE_ATTRIBUTES_CLASS_NAME = "io.opentelemetry.semconv.ResourceAttributes";
|
||||
boolean isLowVersion = !ClassUtils.isPresent(
|
||||
RESOURCE_ATTRIBUTES_CLASS_NAME, Thread.currentThread().getContextClassLoader());
|
||||
AttributeKey<String> serviceNameAttributeKey = AttributeKey.stringKey("service.name");
|
||||
String SERVICE_NAME = "SERVICE_NAME";
|
||||
|
||||
if (isLowVersion) {
|
||||
RESOURCE_ATTRIBUTES_CLASS_NAME = "io.opentelemetry.semconv.resource.attributes.ResourceAttributes";
|
||||
}
|
||||
try {
|
||||
serviceNameAttributeKey = (AttributeKey<String>) ClassUtils.resolveClass(
|
||||
RESOURCE_ATTRIBUTES_CLASS_NAME,
|
||||
Thread.currentThread().getContextClassLoader())
|
||||
.getDeclaredField(SERVICE_NAME)
|
||||
.get(null);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
io.opentelemetry.sdk.trace.SdkTracerProviderBuilder builder =
|
||||
io.opentelemetry.sdk.trace.SdkTracerProvider.builder()
|
||||
.setSampler(sampler)
|
||||
.setResource(io.opentelemetry.sdk.resources.Resource.create(
|
||||
io.opentelemetry.api.common.Attributes.of(
|
||||
io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME,
|
||||
applicationName)));
|
||||
io.opentelemetry.sdk.trace.SdkTracerProvider.builder()
|
||||
.setSampler(sampler)
|
||||
.setResource(io.opentelemetry.sdk.resources.Resource.create(
|
||||
io.opentelemetry.api.common.Attributes.of(serviceNameAttributeKey, applicationName)));
|
||||
spanProcessors.orderedStream().forEach(builder::addSpanProcessor);
|
||||
return builder.build();
|
||||
}
|
||||
|
|
@ -101,35 +125,35 @@ public class OpenTelemetryAutoConfiguration {
|
|||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.opentelemetry.context.propagation.ContextPropagators otelContextPropagators(
|
||||
ObjectProvider<io.opentelemetry.context.propagation.TextMapPropagator> textMapPropagators) {
|
||||
ObjectProvider<io.opentelemetry.context.propagation.TextMapPropagator> textMapPropagators) {
|
||||
return io.opentelemetry.context.propagation.ContextPropagators.create(
|
||||
io.opentelemetry.context.propagation.TextMapPropagator.composite(
|
||||
textMapPropagators.orderedStream().collect(Collectors.toList())));
|
||||
io.opentelemetry.context.propagation.TextMapPropagator.composite(
|
||||
textMapPropagators.orderedStream().collect(Collectors.toList())));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler otelSampler() {
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler rootSampler =
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler.traceIdRatioBased(
|
||||
this.dubboConfigProperties.getTracing().getSampling().getProbability());
|
||||
io.opentelemetry.sdk.trace.samplers.Sampler.traceIdRatioBased(
|
||||
this.dubboConfigProperties.getTracing().getSampling().getProbability());
|
||||
return io.opentelemetry.sdk.trace.samplers.Sampler.parentBased(rootSampler);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.opentelemetry.sdk.trace.SpanProcessor otelSpanProcessor(
|
||||
ObjectProvider<io.opentelemetry.sdk.trace.export.SpanExporter> spanExporters,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanExportingPredicate> spanExportingPredicates,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanReporter> spanReporters,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanFilter> spanFilters) {
|
||||
ObjectProvider<io.opentelemetry.sdk.trace.export.SpanExporter> spanExporters,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanExportingPredicate> spanExportingPredicates,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanReporter> spanReporters,
|
||||
ObjectProvider<io.micrometer.tracing.exporter.SpanFilter> spanFilters) {
|
||||
return io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(
|
||||
new io.micrometer.tracing.otel.bridge.CompositeSpanExporter(
|
||||
spanExporters.orderedStream().collect(Collectors.toList()),
|
||||
spanExportingPredicates.orderedStream().collect(Collectors.toList()),
|
||||
spanReporters.orderedStream().collect(Collectors.toList()),
|
||||
spanFilters.orderedStream().collect(Collectors.toList())))
|
||||
.build();
|
||||
new io.micrometer.tracing.otel.bridge.CompositeSpanExporter(
|
||||
spanExporters.orderedStream().collect(Collectors.toList()),
|
||||
spanExportingPredicates.orderedStream().collect(Collectors.toList()),
|
||||
spanReporters.orderedStream().collect(Collectors.toList()),
|
||||
spanFilters.orderedStream().collect(Collectors.toList())))
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
|
@ -141,40 +165,40 @@ public class OpenTelemetryAutoConfiguration {
|
|||
@Bean
|
||||
@ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class)
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer micrometerOtelTracer(
|
||||
io.opentelemetry.api.trace.Tracer tracer,
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher eventPublisher,
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
io.opentelemetry.api.trace.Tracer tracer,
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher eventPublisher,
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
return new io.micrometer.tracing.otel.bridge.OtelTracer(
|
||||
tracer,
|
||||
tracer,
|
||||
otelCurrentTraceContext,
|
||||
eventPublisher,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext,
|
||||
eventPublisher,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext,
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields(),
|
||||
Collections.emptyList()));
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields(),
|
||||
Collections.emptyList()));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.micrometer.tracing.otel.bridge.OtelPropagator otelPropagator(
|
||||
io.opentelemetry.context.propagation.ContextPropagators contextPropagators,
|
||||
io.opentelemetry.api.trace.Tracer tracer) {
|
||||
io.opentelemetry.context.propagation.ContextPropagators contextPropagators,
|
||||
io.opentelemetry.api.trace.Tracer tracer) {
|
||||
return new io.micrometer.tracing.otel.bridge.OtelPropagator(contextPropagators, tracer);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher otelTracerEventPublisher(
|
||||
List<io.micrometer.tracing.otel.bridge.EventListener> eventListeners) {
|
||||
List<io.micrometer.tracing.otel.bridge.EventListener> eventListeners) {
|
||||
return new OTelEventPublisher(eventListeners);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext(
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher publisher) {
|
||||
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher publisher) {
|
||||
io.opentelemetry.context.ContextStorage.addWrapper(
|
||||
new io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper(publisher));
|
||||
new io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper(publisher));
|
||||
return new io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext();
|
||||
}
|
||||
|
||||
|
|
@ -203,50 +227,50 @@ public class OpenTelemetryAutoConfiguration {
|
|||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty(
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_PROPAGATION,
|
||||
name = "type",
|
||||
havingValue = "W3C",
|
||||
matchIfMissing = true)
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_PROPAGATION,
|
||||
name = "type",
|
||||
havingValue = "W3C",
|
||||
matchIfMissing = true)
|
||||
io.opentelemetry.context.propagation.TextMapPropagator w3cTextMapPropagatorWithBaggage(
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
List<String> remoteFields =
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
|
||||
return io.opentelemetry.context.propagation.TextMapPropagator.composite(
|
||||
io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.getInstance(),
|
||||
io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator.getInstance(),
|
||||
new io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(
|
||||
remoteFields,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext, remoteFields, Collections.emptyList())));
|
||||
io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.getInstance(),
|
||||
io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator.getInstance(),
|
||||
new io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(
|
||||
remoteFields,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext, remoteFields, Collections.emptyList())));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty(prefix = ObservabilityUtils.DUBBO_TRACING_PROPAGATION, name = "type", havingValue = "B3")
|
||||
io.opentelemetry.context.propagation.TextMapPropagator b3BaggageTextMapPropagator(
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext otelCurrentTraceContext) {
|
||||
List<String> remoteFields =
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
|
||||
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
|
||||
return io.opentelemetry.context.propagation.TextMapPropagator.composite(
|
||||
io.opentelemetry.extension.trace.propagation.B3Propagator.injectingSingleHeader(),
|
||||
new io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(
|
||||
remoteFields,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext, remoteFields, Collections.emptyList())));
|
||||
io.opentelemetry.extension.trace.propagation.B3Propagator.injectingSingleHeader(),
|
||||
new io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(
|
||||
remoteFields,
|
||||
new io.micrometer.tracing.otel.bridge.OtelBaggageManager(
|
||||
otelCurrentTraceContext, remoteFields, Collections.emptyList())));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty(
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_BAGGAGE_CORRELATION,
|
||||
name = "enabled",
|
||||
matchIfMissing = true)
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_BAGGAGE_CORRELATION,
|
||||
name = "enabled",
|
||||
matchIfMissing = true)
|
||||
io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener otelSlf4JBaggageEventListener() {
|
||||
return new io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener(this.dubboConfigProperties
|
||||
.getTracing()
|
||||
.getBaggage()
|
||||
.getCorrelation()
|
||||
.getFields());
|
||||
.getTracing()
|
||||
.getBaggage()
|
||||
.getCorrelation()
|
||||
.getFields());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -264,10 +288,10 @@ public class OpenTelemetryAutoConfiguration {
|
|||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty(
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_PROPAGATION,
|
||||
name = "type",
|
||||
havingValue = "W3C",
|
||||
matchIfMissing = true)
|
||||
prefix = ObservabilityUtils.DUBBO_TRACING_PROPAGATION,
|
||||
name = "type",
|
||||
havingValue = "W3C",
|
||||
matchIfMissing = true)
|
||||
io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator w3cTextMapPropagatorWithoutBaggage() {
|
||||
return io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.getInstance();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@
|
|||
</modules>
|
||||
|
||||
<properties>
|
||||
<micrometer.version>1.11.5</micrometer.version>
|
||||
<micrometer-tracing.version>1.1.6</micrometer-tracing.version>
|
||||
<opentelemetry.version>1.31.0</opentelemetry.version>
|
||||
<micrometer.version>1.12.0</micrometer.version>
|
||||
<micrometer-tracing.version>1.2.0</micrometer-tracing.version>
|
||||
<opentelemetry.version>1.32.0</opentelemetry.version>
|
||||
<zipkin-reporter.version>2.16.4</zipkin-reporter.version>
|
||||
<prometheus-client.version>0.16.0</prometheus-client.version>
|
||||
</properties>
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@
|
|||
</modules>
|
||||
|
||||
<properties>
|
||||
<spring-boot.version>2.7.17</spring-boot.version>
|
||||
<spring-boot.version>2.7.18</spring-boot.version>
|
||||
<!-- Spring boot buddy is lower than the delivery dependency package version and can only show the defined dependency version -->
|
||||
<byte-buddy.version>1.14.9</byte-buddy.version>
|
||||
<byte-buddy.version>1.14.10</byte-buddy.version>
|
||||
<mockito_version>4.11.0</mockito_version>
|
||||
</properties>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue