Skip to content

Commit f146ca2

Browse files
committed
rabbit
1 parent a26b04a commit f146ca2

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/AbstractMessageListenerContainerInstrumentation.java

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1616
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
18+
import javax.annotation.Nullable;
1819
import net.bytebuddy.asm.Advice;
1920
import net.bytebuddy.description.type.TypeDescription;
2021
import net.bytebuddy.matcher.ElementMatcher;
@@ -40,34 +41,46 @@ public void transform(TypeTransformer transformer) {
4041

4142
@SuppressWarnings("unused")
4243
public static class InvokeListenerAdvice {
44+
45+
public static class AdviceScope {
46+
private final Context context;
47+
private final Scope scope;
48+
49+
public AdviceScope(Context context, Scope scope) {
50+
this.context = context;
51+
this.scope = scope;
52+
}
53+
54+
public void exit(@Nullable Throwable throwable, Message message) {
55+
scope.close();
56+
instrumenter().end(context, message, null, throwable);
57+
}
58+
}
59+
60+
@Nullable
4361
@Advice.OnMethodEnter(suppress = Throwable.class)
44-
public static void onEnter(
45-
@Advice.Argument(1) Object data,
46-
@Advice.Local("otelContext") Context context,
47-
@Advice.Local("otelScope") Scope scope) {
62+
public static AdviceScope onEnter(@Advice.Argument(1) Object data) {
4863
if (!(data instanceof Message)) {
49-
return;
64+
return null;
5065
}
51-
5266
Context parentContext = Java8BytecodeBridge.currentContext();
5367
Message message = (Message) data;
54-
if (instrumenter().shouldStart(parentContext, message)) {
55-
context = instrumenter().start(parentContext, message);
56-
scope = context.makeCurrent();
68+
if (!instrumenter().shouldStart(parentContext, message)) {
69+
return null;
5770
}
71+
Context context = instrumenter().start(parentContext, message);
72+
return new AdviceScope(context, context.makeCurrent());
5873
}
5974

6075
@Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class)
6176
public static void onEnter(
6277
@Advice.Argument(1) Object data,
63-
@Advice.Local("otelContext") Context context,
64-
@Advice.Local("otelScope") Scope scope,
65-
@Advice.Thrown Throwable throwable) {
66-
if (scope == null || !(data instanceof Message)) {
78+
@Advice.Thrown @Nullable Throwable throwable,
79+
@Advice.Enter @Nullable AdviceScope adviceScope) {
80+
if (adviceScope == null || !(data instanceof Message)) {
6781
return;
6882
}
69-
scope.close();
70-
instrumenter().end(context, (Message) data, null, throwable);
83+
adviceScope.exit(throwable, (Message) data);
7184
}
7285
}
7386
}

instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class SpringRabbitInstrumentationModule extends InstrumentationModule {
17+
public class SpringRabbitInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719
public SpringRabbitInstrumentationModule() {
1820
super("spring-rabbit", "spring-rabbit-1.0");
1921
}
@@ -22,4 +24,9 @@ public SpringRabbitInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return singletonList(new AbstractMessageListenerContainerInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

0 commit comments

Comments
 (0)