@Override
        public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {
            InstrumentClass target = instrumentor.getInstrumentClass(loader, className, classfileBuffer);
            InstrumentMethod nextMessage = target.getDeclaredMethod("nextMessage");
            if (nextMessage != null) {
                nextMessage.addScopedInterceptor(QueueingConsumerOnNextInterceptor.class, RabbitMQClientConstants.RABBITMQ_CONSUMER_SCOPE);
            }
            InstrumentMethod nextMessageTimeout = target.getDeclaredMethod("nextMessage", "long");
            if (nextMessageTimeout != null) {
                nextMessageTimeout.addScopedInterceptor(QueueingConsumerOnNextInterceptor.class, RabbitMQClientConstants.RABBITMQ_CONSUMER_SCOPE);
            }
            // spring-rabbit pre-1.7.0
            InstrumentMethod handle1 = target.getDeclaredMethod("handle", "org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$Delivery");
            if (handle1 != null) {
                handle1.addInterceptor(QueueingConsumerHandleInterceptor.class);
            }
            // spring-rabbit 1.7.0+
            InstrumentMethod handle2 = target.getDeclaredMethod("handle", "org.springframework.amqp.rabbit.support.Delivery");
            if (handle2 != null) {
                handle2.addInterceptor(QueueingConsumerHandleInterceptor.class);
            }
            return target.toBytecode();
        }
@author Jinkai.Ma
@author Jiaqi Feng
@author HyunGil Jeong
agent-module/plugins/rabbitmq/src/main/java/com/navercorp/pinpoint/plugin/rabbitmq/client/RabbitMQClientPlugin.java