in apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/MessageConsumerDequeueInterceptor.java [53:101]
public Object afterMethod(final EnhancedInstance objInst,
final Method method,
final Object[] allArguments,
final Class<?>[] argumentsTypes,
final Object ret) throws Throwable {
if (ret == null) {
return ret;
}
MessageDispatch messageDispatch = (MessageDispatch) ret;
ContextCarrier contextCarrier = new ContextCarrier();
String url = (String) objInst.getSkyWalkingDynamicField();
AbstractSpan activeSpan = null;
if (messageDispatch.getDestination().getDestinationType() == QUEUE_TYPE || messageDispatch.getDestination()
.getDestinationType() == TEMP_QUEUE_TYPE) {
activeSpan = ContextManager.createEntrySpan(
OPERATE_NAME_PREFIX + "Queue/" + messageDispatch.getDestination()
.getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null)
.start(System.currentTimeMillis());
Tags.MQ_BROKER.set(activeSpan, url);
Tags.MQ_QUEUE.set(activeSpan, messageDispatch.getDestination().getPhysicalName());
} else if (messageDispatch.getDestination()
.getDestinationType() == TOPIC_TYPE || messageDispatch.getDestination()
.getDestinationType() == TEMP_TOPIC_TYPE) {
activeSpan = ContextManager.createEntrySpan(
OPERATE_NAME_PREFIX + "Topic/" + messageDispatch.getDestination()
.getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null)
.start(System.currentTimeMillis());
Tags.MQ_BROKER.set(activeSpan, url);
Tags.MQ_TOPIC.set(activeSpan, messageDispatch.getDestination().getPhysicalName());
}
if (activeSpan == null) {
return ret;
}
activeSpan.setPeer(url);
activeSpan.setComponent(ComponentsDefine.ACTIVEMQ_CONSUMER);
SpanLayer.asMQ(activeSpan);
CarrierItem next = contextCarrier.items();
while (next.hasNext()) {
next = next.next();
Object propertyValue = messageDispatch.getMessage().getProperty(next.getHeadKey());
if (propertyValue != null) {
next.setHeadValue(propertyValue.toString());
}
}
ContextManager.extract(contextCarrier);
// Close span immediately , as no chance to trace anything
ContextManager.stopSpan(activeSpan);
return ret;
}