code: @Override
  	public Message<?> postReceive(Message<?> message, MessageChannel channel) {
  		if (emptyMessage(message)) {
  			return message;
  		}
  		MessageHeaderAccessor headers = mutableHeaderAccessor(message);
  		TraceContextOrSamplingFlags extracted = this.extractor.extract(headers);
  		Span span = this.threadLocalSpan.next(extracted);
  		MessageHeaderPropagation.removeAnyTraceHeaders(headers,
  				this.tracing.propagation().keys());
  		this.injector.inject(span.context(), headers);
  		if (!span.isNoop()) {
  			span.kind(Span.Kind.CONSUMER).name("receive").start();
  			span.remoteServiceName(REMOTE_SERVICE_NAME);
  			addTags(message, span, channel);
  		}
  		if (log.isDebugEnabled()) {
  			log.debug("Created a new span in post receive " + span);
  		}
  		headers.setImmutable();
  		if (message instanceof ErrorMessage) {
  			ErrorMessage errorMessage = (ErrorMessage) message;
  			return new ErrorMessage(errorMessage.getPayload(),
  					headers.getMessageHeaders(), errorMessage.getOriginalMessage());
  		}
  		return new GenericMessage<>(message.getPayload(), headers.getMessageHeaders());
  	}
docs: This starts a consumer span as a child of the incoming message or the current trace
  context, placing it in scope until the receive completes.