@Override
    public void before(Object target, Object[] args) {
        if (!validate(target, args)) {
            return;
        }
        if (isDebug) {
            logger.beforeInterceptor(target, args);
        }
        try {
            final Trace trace = createTrace(target, args);
            if (trace == null) {
                return;
            }
            if (!trace.canSampled()) {
                return;
            }
            SpanEventRecorder recorder = trace.traceBlockBegin();
            recorder.recordServiceType(RabbitMQClientConstants.RABBITMQ_CLIENT_INTERNAL);
            // args[2] would be com.rabbitmq.client.Envelope, implementing AsyncContextAccessor via plugin
            AsyncContextAccessor accessor = ArrayArgumentUtils.getArgument(args, 2, AsyncContextAccessor.class);
            if (accessor != null) {
                AsyncContext asyncContext = recorder.recordNextAsyncContext();
                accessor._$PINPOINT$_setAsyncContext(asyncContext);
            }
        } catch (Throwable th) {
            if (logger.isWarnEnabled()) {
                logger.warn("BEFORE. Caused:{}", th.getMessage(), th);
            }
        }
    }
Consumer entry point interceptor for basic deliveries where messages will be delivered to a <tt>Consumer</tt>.

@author Jinkai.Ma
@author Jiaqi Feng
@author HyunGil Jeong
agent-module/plugins/rabbitmq/src/main/java/com/navercorp/pinpoint/plugin/rabbitmq/client/interceptor/RabbitMQConsumerDispatchInterceptor.java