1818import io .opentelemetry .instrumentation .api .instrumenter .messaging .MessagingAttributesExtractor ;
1919import io .opentelemetry .instrumentation .api .instrumenter .messaging .MessagingAttributesGetter ;
2020import io .opentelemetry .instrumentation .api .instrumenter .net .NetClientAttributesExtractor ;
21+ import io .opentelemetry .instrumentation .api .internal .PropagatorBasedSpanLinksExtractor ;
2122import io .opentelemetry .javaagent .bootstrap .internal .ExperimentalConfig ;
2223import io .opentelemetry .javaagent .bootstrap .internal .InstrumentationConfig ;
2324import java .util .ArrayList ;
@@ -29,18 +30,15 @@ public final class RabbitSingletons {
2930 InstrumentationConfig .get ()
3031 .getBoolean ("otel.instrumentation.rabbitmq.experimental-span-attributes" , false );
3132 private static final String instrumentationName = "io.opentelemetry.rabbitmq-2.7" ;
32- private static final Instrumenter <ChannelAndMethod , Void > channelInstrumenter ;
33- private static final Instrumenter <ReceiveRequest , GetResponse > receiveInstrumenter ;
34- private static final Instrumenter <DeliveryRequest , Void > deliverInstrumenter ;
33+ private static final Instrumenter <ChannelAndMethod , Void > channelInstrumenter =
34+ createChannelInstrumenter ();
35+ private static final Instrumenter <ReceiveRequest , GetResponse > receiveInstrumenter =
36+ createReceiveInstrumenter ();
37+ private static final Instrumenter <DeliveryRequest , Void > deliverInstrumenter =
38+ createDeliverInstrumenter ();
3539 static final ContextKey <RabbitChannelAndMethodHolder > CHANNEL_AND_METHOD_CONTEXT_KEY =
3640 ContextKey .named ("opentelemetry-rabbitmq-channel-and-method-context-key" );
3741
38- static {
39- channelInstrumenter = createChannelInstrumenter ();
40- receiveInstrumenter = createReceiveInstrumenter ();
41- deliverInstrumenter = createDeliverInstrumenter ();
42- }
43-
4442 public static Instrumenter <ChannelAndMethod , Void > channelInstrumenter () {
4543 return channelInstrumenter ;
4644 }
@@ -82,7 +80,12 @@ private static Instrumenter<ReceiveRequest, GetResponse> createReceiveInstrument
8280 return Instrumenter .<ReceiveRequest , GetResponse >builder (
8381 GlobalOpenTelemetry .get (), instrumentationName , ReceiveRequest ::spanName )
8482 .addAttributesExtractors (extractors )
85- .buildInstrumenter (SpanKindExtractor .alwaysClient ());
83+ .setEnabled (ExperimentalConfig .get ().messagingReceiveInstrumentationEnabled ())
84+ .addSpanLinksExtractor (
85+ new PropagatorBasedSpanLinksExtractor <>(
86+ GlobalOpenTelemetry .getPropagators ().getTextMapPropagator (),
87+ ReceiveRequestTextMapGetter .INSTANCE ))
88+ .buildInstrumenter (SpanKindExtractor .alwaysConsumer ());
8689 }
8790
8891 private static Instrumenter <DeliveryRequest , Void > createDeliverInstrumenter () {
0 commit comments