private void addSpringAmqpSupport(final boolean traceProducer, final boolean traceConsumer) {
        if (!traceProducer && !traceConsumer) {
            return;
        }

        transformTemplate.transform("org.springframework.amqp.rabbit.core.RabbitTemplate", RabbitTemplateTransform.class);

        // Spring-amqp rabbit client transformation
        if (traceConsumer) {
            // Message
            transformTemplate.transform("org.springframework.amqp.core.Message", MessageTransform.class);

            // Delivery
            // spring-rabbit pre-1.7.0
            transformTemplate.transform("org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$Delivery", BlockingQueueConsumerDeliveryTransform.class);
            // spring-rabbit 1.7.0+
            transformTemplate.transform("org.springframework.amqp.rabbit.support.Delivery", DeliveryTransform.class);

            // BlockingQueueConsumer
            transformTemplate.transform("org.springframework.amqp.rabbit.listener.BlockingQueueConsumer", BlockingQueueConsumerTransform.class);
            transformTemplate.transform("org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$InternalConsumer", BlockingQueueConsumerInternalConsumerTransform.class);
            // Spring-rabbit 1.7.7+, 2.0.3+
            transformTemplate.transform("org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$ConsumerDecorator", BlockingQueueConsumerConsumerDecoratorTransform.class);
        }
    }
@author Jinkai.Ma
@author Jiaqi Feng
@author HyunGil Jeong
agent-module/plugins/rabbitmq/src/main/java/com/navercorp/pinpoint/plugin/rabbitmq/client/RabbitMQClientPlugin.java