public void beforeMethod()

in apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/main/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQProducerInterceptor.java [42:91]


    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
        MethodInterceptResult result) throws Throwable {
        ContextCarrier contextCarrier = new ContextCarrier();
        AMQP.BasicProperties properties = (AMQP.BasicProperties) allArguments[4];
        AMQP.BasicProperties.Builder propertiesBuilder;

        Map<String, Object> headers = new HashMap<String, Object>();
        if (properties != null) {
            propertiesBuilder = properties.builder()
                                          .appId(properties.getAppId())
                                          .clusterId(properties.getClusterId())
                                          .contentEncoding(properties.getContentEncoding())
                                          .contentType(properties.getContentType())
                                          .correlationId(properties.getCorrelationId())
                                          .deliveryMode(properties.getDeliveryMode())
                                          .expiration(properties.getExpiration())
                                          .messageId(properties.getMessageId())
                                          .priority(properties.getPriority())
                                          .replyTo(properties.getReplyTo())
                                          .timestamp(properties.getTimestamp())
                                          .type(properties.getType())
                                          .userId(properties.getUserId());

            // copy origin headers
            if (properties.getHeaders() != null) {
                headers.putAll(properties.getHeaders());
            }
        } else {
            propertiesBuilder = new AMQP.BasicProperties.Builder();
        }

        String exChangeName = (String) allArguments[0];
        String queueName = (String) allArguments[1];
        String url = (String) objInst.getSkyWalkingDynamicField();
        AbstractSpan activeSpan = ContextManager.createExitSpan(OPERATE_NAME_PREFIX + "Topic/" + exChangeName + "Queue/" + queueName + PRODUCER_OPERATE_NAME_SUFFIX, contextCarrier, url);
        Tags.MQ_BROKER.set(activeSpan, url);
        Tags.MQ_QUEUE.set(activeSpan, queueName);
        Tags.MQ_TOPIC.set(activeSpan, exChangeName);
        contextCarrier.extensionInjector().injectSendingTimestamp();
        SpanLayer.asMQ(activeSpan);
        activeSpan.setComponent(ComponentsDefine.RABBITMQ_PRODUCER);
        CarrierItem next = contextCarrier.items();

        while (next.hasNext()) {
            next = next.next();
            headers.put(next.getHeadKey(), next.getHeadValue());
        }

        allArguments[4] = propertiesBuilder.headers(headers).build();
    }