This is an automated email from the ASF dual-hosted git repository.

congguoqinghuhu pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new b14e5e3a12 fix: fix observationsender error & feat: add 
DubboTracingObservationHandler (#13818)
b14e5e3a12 is described below

commit b14e5e3a12bea550b9fce3f3a94913e5d2ad3be5
Author: conghuhu <[email protected]>
AuthorDate: Wed Mar 6 19:33:40 2024 -0600

    fix: fix observationsender error & feat: add DubboTracingObservationHandler 
(#13818)
---
 .../dubbo-demo-spring-boot-consumer/pom.xml        |  6 +++
 .../src/main/resources/application.yml             |  3 --
 .../src/main/resources/log4j2.xml                  |  2 +-
 .../dubbo-demo-spring-boot-provider/pom.xml        |  6 +++
 .../src/main/resources/application.yml             |  4 --
 .../src/main/resources/log4j2.xml                  |  2 +-
 ...g.apache.dubbo.rpc.cluster.filter.ClusterFilter |  1 -
 .../dubbo/tracing/DubboObservationRegistry.java    |  8 +++-
 .../dubbo/tracing/context/DubboClientContext.java  |  3 +-
 .../dubbo/tracing/context/DubboServerContext.java  |  3 +-
 .../tracing/filter/ObservationReceiverFilter.java  |  4 +-
 .../tracing/filter/ObservationSenderFilter.java    |  4 +-
 .../DubboClientTracingObservationHandler.java}     | 37 ++++++----------
 .../DubboServerTracingObservationHandler.java      | 51 ++++++++++++++++++++++
 .../DubboMicrometerTracingAutoConfiguration.java   | 25 ++++++++++-
 .../autoconfigure/ObservationHandlerGrouping.java  |  7 ++-
 .../brave/BraveAutoConfiguration.java              |  8 ++--
 .../otel/OpenTelemetryAutoConfiguration.java       | 23 +++++-----
 18 files changed, 139 insertions(+), 58 deletions(-)

diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
index 9179bd6ff6..024baf4152 100644
--- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
+++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
@@ -101,6 +101,12 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-logging</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
index 10d0ec74e7..20bee1f724 100644
--- 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
+++ 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
@@ -32,7 +32,4 @@ dubbo:
   metadata-report:
     address: zookeeper://127.0.0.1:2181
 
-logging:
-  pattern:
-    level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
 
diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
index 69e1321d22..87c6dd5b19 100644
--- 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
+++ 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
@@ -18,7 +18,7 @@
 <Configuration status="WARN">
     <Appenders>
         <Console name="Console" target="SYSTEM_OUT" follow="true">
-            <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta} 
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue} 
%style{-|}{White} 
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}" 
disableAnsi="false" charset="UTF-8"/>
+            <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta} 
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue} 
[%X{traceId}, %X{spanId}] %style{-|}{White} 
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}" 
disableAnsi="false" charset="UTF-8"/>
         </Console>
     </Appenders>
     <Loggers>
diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
index a14a0199b8..2c0d523449 100644
--- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
@@ -101,6 +101,12 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-logging</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
index d06fdfb28c..b1789be60f 100644
--- 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
+++ 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
@@ -41,7 +41,3 @@ dubbo:
       exporter:
         enabled: true
     enable-metadata: true
-logging:
-  pattern:
-    level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
-
diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
index 69e1321d22..87c6dd5b19 100644
--- 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
+++ 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
@@ -18,7 +18,7 @@
 <Configuration status="WARN">
     <Appenders>
         <Console name="Console" target="SYSTEM_OUT" follow="true">
-            <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta} 
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue} 
%style{-|}{White} 
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}" 
disableAnsi="false" charset="UTF-8"/>
+            <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta} 
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue} 
[%X{traceId}, %X{spanId}] %style{-|}{White} 
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}" 
disableAnsi="false" charset="UTF-8"/>
         </Console>
     </Appenders>
     <Loggers>
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
 
b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
index b9b03c571e..3d5a3f4937 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
@@ -1,3 +1,2 @@
-observationsender=org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter
 
metricsClusterFilter=org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter
 monitor=org.apache.dubbo.monitor.support.MonitorClusterFilter
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
index 5ace0906b0..5e9b7b35b3 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
@@ -23,6 +23,8 @@ import org.apache.dubbo.config.TracingConfig;
 import org.apache.dubbo.metrics.MetricsGlobalRegistry;
 import org.apache.dubbo.metrics.utils.MetricsSupportUtil;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.tracing.handler.DubboClientTracingObservationHandler;
+import org.apache.dubbo.tracing.handler.DubboServerTracingObservationHandler;
 import org.apache.dubbo.tracing.tracer.PropagatorProvider;
 import org.apache.dubbo.tracing.tracer.PropagatorProviderFactory;
 import org.apache.dubbo.tracing.tracer.TracerProvider;
@@ -87,7 +89,11 @@ public class DubboObservationRegistry {
                                         tracer, propagator),
                                 new 
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(
                                         tracer, propagator),
-                                new 
io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer)));
+                                new 
io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer)))
+                .observationHandler(
+                        new 
io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler(
+                                new 
DubboClientTracingObservationHandler<>(tracer),
+                                new 
DubboServerTracingObservationHandler<>(tracer)));
 
         if (MetricsSupportUtil.isSupportMetrics()) {
             io.micrometer.core.instrument.MeterRegistry meterRegistry =
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
index 3491585f40..ca91ea1c81 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.rpc.Invoker;
 
 import java.util.Objects;
 
+import io.micrometer.observation.transport.Kind;
 import io.micrometer.observation.transport.SenderContext;
 
 /**
@@ -33,7 +34,7 @@ public class DubboClientContext extends 
SenderContext<Invocation> {
     private final Invocation invocation;
 
     public DubboClientContext(Invoker<?> invoker, Invocation invocation) {
-        super((map, key, value) -> 
Objects.requireNonNull(map).setAttachment(key, value));
+        super((carrier, key, value) -> 
Objects.requireNonNull(carrier).setAttachment(key, value), Kind.CLIENT);
         this.invoker = invoker;
         this.invocation = invocation;
         setCarrier(invocation);
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
index 85de37203c..6ffe5e27e2 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.tracing.context;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 
+import io.micrometer.observation.transport.Kind;
 import io.micrometer.observation.transport.ReceiverContext;
 
 /**
@@ -31,7 +32,7 @@ public class DubboServerContext extends 
ReceiverContext<Invocation> {
     private final Invocation invocation;
 
     public DubboServerContext(Invoker<?> invoker, Invocation invocation) {
-        super((stringObjectMap, s) -> 
String.valueOf(stringObjectMap.getAttachment(s)));
+        super((carrier, s) -> String.valueOf(carrier.getAttachment(s)), 
Kind.SERVER);
         this.invoker = invoker;
         this.invocation = invocation;
         setCarrier(invocation);
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
index 75d70d26f7..f19ada47a2 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
@@ -44,9 +44,9 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.PROVIDER;
         onClass = "io.micrometer.observation.NoopObservationRegistry")
 public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, 
ScopeModelAware {
 
-    private ObservationRegistry observationRegistry;
+    private final ObservationRegistry observationRegistry;
 
-    private DubboServerObservationConvention serverObservationConvention;
+    private final DubboServerObservationConvention serverObservationConvention;
 
     public ObservationReceiverFilter(ApplicationModel applicationModel) {
         observationRegistry = 
applicationModel.getBeanFactory().getBean(ObservationRegistry.class);
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
index 3d0cd0ab20..ce93e7ff7a 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
@@ -45,9 +45,9 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.CONSUMER;
         onClass = "io.micrometer.observation.NoopObservationRegistry")
 public class ObservationSenderFilter implements ClusterFilter, 
BaseFilter.Listener, ScopeModelAware {
 
-    private ObservationRegistry observationRegistry;
+    private final ObservationRegistry observationRegistry;
 
-    private DubboClientObservationConvention clientObservationConvention;
+    private final DubboClientObservationConvention clientObservationConvention;
 
     public ObservationSenderFilter(ApplicationModel applicationModel) {
         observationRegistry = 
applicationModel.getBeanFactory().getBean(ObservationRegistry.class);
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
similarity index 54%
copy from 
dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
copy to 
dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
index 3491585f40..1f6542ba4f 100644
--- 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
@@ -14,36 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.tracing.context;
+package org.apache.dubbo.tracing.handler;
 
-import org.apache.dubbo.rpc.Invocation;
-import org.apache.dubbo.rpc.Invoker;
-
-import java.util.Objects;
+import org.apache.dubbo.tracing.context.DubboClientContext;
 
+import io.micrometer.observation.Observation;
+import io.micrometer.observation.ObservationHandler;
 import io.micrometer.observation.transport.SenderContext;
+import io.micrometer.tracing.Tracer;
 
-/**
- * Provider context for RPC.
- */
-public class DubboClientContext extends SenderContext<Invocation> {
-
-    private final Invoker<?> invoker;
+public class DubboClientTracingObservationHandler<T extends 
DubboClientContext> implements ObservationHandler<T> {
+    private final Tracer tracer;
 
-    private final Invocation invocation;
-
-    public DubboClientContext(Invoker<?> invoker, Invocation invocation) {
-        super((map, key, value) -> 
Objects.requireNonNull(map).setAttachment(key, value));
-        this.invoker = invoker;
-        this.invocation = invocation;
-        setCarrier(invocation);
+    public DubboClientTracingObservationHandler(Tracer tracer) {
+        this.tracer = tracer;
     }
 
-    public Invoker<?> getInvoker() {
-        return invoker;
-    }
+    @Override
+    public void onScopeOpened(T context) {}
 
-    public Invocation getInvocation() {
-        return invocation;
+    @Override
+    public boolean supportsContext(Observation.Context context) {
+        return context instanceof SenderContext;
     }
 }
diff --git 
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
new file mode 100644
index 0000000000..e117b3ab68
--- /dev/null
+++ 
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.tracing.handler;
+
+import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.tracing.context.DubboServerContext;
+
+import io.micrometer.observation.Observation;
+import io.micrometer.observation.ObservationHandler;
+import io.micrometer.observation.transport.ReceiverContext;
+import io.micrometer.tracing.TraceContext;
+import io.micrometer.tracing.Tracer;
+
+public class DubboServerTracingObservationHandler<T extends 
DubboServerContext> implements ObservationHandler<T> {
+
+    private static final String DEFAULT_TRACE_ID_KEY = "traceId";
+
+    private final Tracer tracer;
+
+    public DubboServerTracingObservationHandler(Tracer tracer) {
+        this.tracer = tracer;
+    }
+
+    @Override
+    public void onScopeOpened(T context) {
+        TraceContext traceContext = tracer.currentTraceContext().context();
+        if (traceContext == null) {
+            return;
+        }
+        RpcContext.getServerContext().setAttachment(DEFAULT_TRACE_ID_KEY, 
traceContext.traceId());
+    }
+
+    @Override
+    public boolean supportsContext(Observation.Context context) {
+        return context instanceof ReceiverContext;
+    }
+}
diff --git 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
index 691dea9d9d..8ec987dabf 100644
--- 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
+++ 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
@@ -16,7 +16,10 @@
  */
 package org.apache.dubbo.spring.boot.observability.autoconfigure;
 
+import org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration;
 import 
org.apache.dubbo.spring.boot.observability.autoconfigure.annotation.ConditionalOnDubboTracingEnable;
+import org.apache.dubbo.tracing.handler.DubboClientTracingObservationHandler;
+import org.apache.dubbo.tracing.handler.DubboServerTracingObservationHandler;
 
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -40,7 +43,9 @@ import static 
org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
             "io.micrometer.tracing.Tracer",
             "io.micrometer.tracing.propagation.Propagator"
         })
-@AutoConfigureAfter(name = 
"org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration")
+@AutoConfigureAfter(
+        name = 
"org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration",
+        value = DubboAutoConfiguration.class)
 public class DubboMicrometerTracingAutoConfiguration {
 
     /**
@@ -82,4 +87,22 @@ public class DubboMicrometerTracingAutoConfiguration {
                     io.micrometer.tracing.Tracer tracer, 
io.micrometer.tracing.propagation.Propagator propagator) {
         return new 
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(tracer,
 propagator);
     }
+
+    @Bean
+    @ConditionalOnMissingBean
+    @ConditionalOnBean({io.micrometer.tracing.Tracer.class})
+    @Order(SENDER_TRACING_OBSERVATION_HANDLER_ORDER)
+    public DubboClientTracingObservationHandler<?> 
dubboClientTracingObservationHandler(
+            io.micrometer.tracing.Tracer tracer) {
+        return new DubboClientTracingObservationHandler<>(tracer);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    @ConditionalOnBean({io.micrometer.tracing.Tracer.class})
+    @Order(RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER)
+    public DubboServerTracingObservationHandler<?> 
dubboServerTracingObservationHandler(
+            io.micrometer.tracing.Tracer tracer) {
+        return new DubboServerTracingObservationHandler<>(tracer);
+    }
 }
diff --git 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
index d2d1820352..4d848dbea8 100644
--- 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
+++ 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.spring.boot.observability.autoconfigure;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -47,12 +48,13 @@ class ObservationHandlerGrouping {
     void apply(List<ObservationHandler<?>> handlers, 
ObservationRegistry.ObservationConfig config) {
         MultiValueMap<Class<? extends ObservationHandler>, 
ObservationHandler<?>> groupings =
                 new LinkedMultiValueMap<>();
+        List<ObservationHandler<?>> handlersWithoutCategory = new 
ArrayList<>();
         for (ObservationHandler<?> handler : handlers) {
             Class<? extends ObservationHandler> category = 
findCategory(handler);
             if (category != null) {
                 groupings.add(category, handler);
             } else {
-                config.observationHandler(handler);
+                handlersWithoutCategory.add(handler);
             }
         }
         for (Class<? extends ObservationHandler> category : this.categories) {
@@ -62,6 +64,9 @@ class ObservationHandlerGrouping {
                         new 
ObservationHandler.FirstMatchingCompositeObservationHandler(handlerGroup));
             }
         }
+        for (ObservationHandler<?> observationHandler : 
handlersWithoutCategory) {
+            config.observationHandler(observationHandler);
+        }
     }
 
     private Class<? extends ObservationHandler> 
findCategory(ObservationHandler<?> handler) {
diff --git 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
index 99ffc78136..03bcee9ed8 100644
--- 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
+++ 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
@@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.Ordered;
 import org.springframework.core.annotation.Order;
+import org.springframework.core.env.Environment;
 
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
 
@@ -63,7 +64,7 @@ public class BraveAutoConfiguration {
     /**
      * 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 = 
"unknown_dubbo_service";
 
     private final DubboConfigurationProperties dubboConfigProperties;
 
@@ -87,14 +88,15 @@ public class BraveAutoConfiguration {
     @Bean
     @ConditionalOnMissingBean
     public brave.Tracing braveTracing(
+            Environment environment,
             List<brave.handler.SpanHandler> spanHandlers,
             List<brave.TracingCustomizer> tracingCustomizers,
             brave.propagation.CurrentTraceContext currentTraceContext,
             brave.propagation.Propagation.Factory propagationFactory,
             brave.sampler.Sampler sampler) {
         String applicationName = 
dubboConfigProperties.getApplication().getName();
-        if (StringUtils.isEmpty(applicationName)) {
-            applicationName = DEFAULT_APPLICATION_NAME;
+        if (StringUtils.isBlank(applicationName)) {
+            applicationName = 
environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
         }
         brave.Tracing.Builder builder = brave.Tracing.newBuilder()
                 .currentTraceContext(currentTraceContext)
diff --git 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
index 4eba4950dc..678b2e48e0 100644
--- 
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
+++ 
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
@@ -18,8 +18,7 @@ package 
org.apache.dubbo.spring.boot.observability.autoconfigure.otel;
 
 import org.apache.dubbo.common.Version;
 import org.apache.dubbo.common.utils.ClassUtils;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.rpc.model.ModuleModel;
+import org.apache.dubbo.common.utils.StringUtils;
 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;
@@ -38,6 +37,7 @@ import 
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 
 import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
 
@@ -62,15 +62,12 @@ public class OpenTelemetryAutoConfiguration {
     /**
      * Default value for application name if {@code spring.application.name} 
is not set.
      */
-    private static final String DEFAULT_APPLICATION_NAME = "application";
+    private static final String DEFAULT_APPLICATION_NAME = 
"unknown_dubbo_service";
 
     private final DubboConfigurationProperties dubboConfigProperties;
 
-    private final ModuleModel moduleModel;
-
-    OpenTelemetryAutoConfiguration(DubboConfigurationProperties 
dubboConfigProperties, ModuleModel moduleModel) {
+    OpenTelemetryAutoConfiguration(DubboConfigurationProperties 
dubboConfigProperties) {
         this.dubboConfigProperties = dubboConfigProperties;
-        this.moduleModel = moduleModel;
     }
 
     @Bean
@@ -87,14 +84,14 @@ public class OpenTelemetryAutoConfiguration {
     @Bean
     @ConditionalOnMissingBean
     io.opentelemetry.sdk.trace.SdkTracerProvider otelSdkTracerProvider(
+            Environment environment,
             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);
+        String applicationName = 
dubboConfigProperties.getApplication().getName();
+        if (StringUtils.isBlank(applicationName)) {
+            applicationName = 
environment.getProperty("spring.application.name", 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(

Reply via email to