private TraceId retrieveNextTraceId() {
        Object attachment = scope.getCurrentInvocation().getAttachment();
        if (attachment == null) {
            if (isDebug) {
                logger.debug("Invalid attachment. Expected {}, but got null", TraceId.class.getName());
            }
            return null;
        }
        if (!(attachment instanceof TraceId)) {
            if (isDebug) {
                logger.debug("Invalid attachment. Expected {}, but got {}", TraceId.class.getName(), attachment.getClass());
            }
            return null;
        }
        return (TraceId) attachment;
    }
<p>{@code AMQContentHeader} received as an argument to the constructor is sharable and can be reused, such as
{@code MessageProperties.MINIMAL_BASIC}. Any changes made to it (ie injecting pinpoint headers) may have undesirable
consequences.

<p>Hence, we make a copy via {@code ChannelAspect} and add pinpoint headers to it when propagating trace, and have
{@code AMQCommand} use this.

@author HyunGil Jeong

@see com.navercorp.pinpoint.plugin.rabbitmq.client.aspect.ChannelAspect
agent-module/plugins/rabbitmq/src/main/java/com/navercorp/pinpoint/plugin/rabbitmq/client/interceptor/AMQCommandConstructInterceptor.java