public Object afterMethod()

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;
    }